私のプログラムは2056のような年をユーザに尋ねます。したがってmainではscanfを使います。Cのmainから渡された値の最初の2桁を取得する方法は?
しかし、私はこの値の最初の2桁だけを必要とする関数を持っています。
他のscanfを関数自体の中で使ってみましたが、他のscanf( "%2d" ...)は他のscanfをメインに持つことができません。
どうすればいいですか?
私のプログラムは2056のような年をユーザに尋ねます。したがってmainではscanfを使います。Cのmainから渡された値の最初の2桁を取得する方法は?
しかし、私はこの値の最初の2桁だけを必要とする関数を持っています。
他のscanfを関数自体の中で使ってみましたが、他のscanf( "%2d" ...)は他のscanfをメインに持つことができません。
どうすればいいですか?
int year = 2056;
int firstPart = year/100;
ちょうど年数を100で割ってみましょう。
int year, first_two_digits;
scanf("%d",&year);
first_two_digits = year/100;
は、私はあなたのプログラムがこの場合、年間10000
後にどのように振る舞うべきか疑問に思う、私はちょうど一年を読んで、最初の2桁を抽出します:
int year;
scanf("%4d", &year); // assuming a four digit year
int first_two_digits = year/100;
私が持っていたが非常によく似た質問 - https://math.stackexchange.com/questions/120459/how-to-find-the-first-and-last-n-2-digits-from-an-n-digit-number
あなたの場合、常に4
- 数字とyo最初に2
-digitsが必要です。そして、他の人たちがX/100
がやるのが一番良いと示唆しています。
しかし、あなたはn
桁の整数からn/2
-digitsが必要な場合は、次を使用する必要があり、X
を言う:
first n/2 digit (for even value of n) = X/10^(n/2)
first n/2 digit (for odd value of n) = X/10^((n+1)/2)
last n/2 digit (for even value of n) = X - [first n/2 digit * pow(10, n/2)]
last n/2 digit (for odd value of n) = X - [first n/2 digit * pow(10, (n+1)/2)]
以下はやり過ぎかもしれないが、あなたが探してすることができますこのようなもの!
int getn(int num)
{
return (int) log10(num) + 1;
}
void gethalfs(int num, int * first, int * last)
{
int n, po;
if (num == 0) return;
n = getn(num);
/* Here you can calculate the value of po based on whether n is even or odd */
po = (int) pow(10, n/2);
*first = num/po;
*last = num - *first * po;
return;
}
上記の場合、すなわちn
指定された整数の桁数を取得するには、次の可能な方法を見てもよい - count number of digits - which method is most efficient?
・ホープ、このことができます!
別の変数を使用してfirst2digits = year/100の最初の2桁を取得します。
あなたが流れるを使用して、任意の数の最初の2桁を取得することができます:
INT(X*10^(-INT(LOG(X))+1))
例えば:
X = 0.005432
、その後Log(X) = -2.265
とInt(Log(x)) = -3
。従って、10^(-int(log(x))+1) = 10^4 = 10000
。最後に、int(X * 10000) = 54
が最初の2桁です。
X = 3.45
Log(X) =0.53
およびInt(Log(x)) = 0 So, 10^(-int(log(x))+1) = 10^1 = 10
。最後に、int(X * 10) = 34
が最初の2桁です。
X = 3543.45
、その後Log(X) =3.459
とInt(Log(x)) = 3
ので、10^(-int(log(x))+1) = 10^-2 = 0.01
。最後に、最初の2桁のint(X * 10) = 35
。
あなたの 'scanf'ではうまくいかなかったのですが? – cnicutar
入力を2回提出する必要があるためです。 – Sam