2012-03-16 5 views
1

私のプログラムは2056のような年をユーザに尋ねます。したがってmainではscanfを使います。Cのmainから渡された値の最初の2桁を取得する方法は?

しかし、私はこの値の最初の2桁だけを必要とする関数を持っています。

他のscanfを関数自体の中で使ってみましたが、他のscanf( "%2d" ...)は他のscanfをメインに持つことができません。

どうすればいいですか?

+1

あなたの 'scanf'ではうまくいかなかったのですが? – cnicutar

+0

入力を2回提出する必要があるためです。 – Sam

答えて

6
int year = 2056; 
int firstPart = year/100; 
2

ちょうど年数を100で割ってみましょう。

int year, first_two_digits; 
scanf("%d",&year); 
first_two_digits = year/100; 

は、私はあなたのプログラムこの場合、年間10000

2

後にどのように振る舞うべきか疑問に思う、私はちょうど一年を読んで、最初の2桁を抽出します:

int year; 
scanf("%4d", &year); // assuming a four digit year 
int first_two_digits = year/100; 
3

私が持っていたが非常によく似た質問 - 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?

・ホープ、このことができます!

2

別の変数を使用してfirst2digits = year/100の最初の2桁を取得します。

0

あなたが流れるを使用して、任意の数の最初の2桁を取得することができます:

INT(X*10^(-INT(LOG(X))+1))

例えば:

  • X = 0.005432、その後Log(X) = -2.265Int(Log(x)) = -3。従って、10^(-int(log(x))+1) = 10^4 = 10000。最後に、int(X * 10000) = 54が最初の2桁です。

  • X = 3.45Log(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.459Int(Log(x)) = 3ので、10^(-int(log(x))+1) = 10^-2 = 0.01。最後に、最初の2桁のint(X * 10) = 35

関連する問題