C言語関係掲示板

過去ログ

No.452.x の y乗 を z で割った余り

[戻る] [ホームページ]
No.3241

教えてください。
投稿者---Gackt(2002/10/30 14:03:42)


#include <stdio.h>

main(){
int x,y,z,m,g;

printf("xのy乗を求めます。\n");
scanf("%d %d",&x,&y);

m=1;
while(y>0){
if(y%2==1) m *= x;

x=x*x;
y=y/2;
}

printf("xのy乗をzで割り余りをだします。\n");
scanf("%d", &z);

g=m%z;

printf("よって余りは %d です。\n);
}

このプログラムは、入力する桁が小さければ大丈夫です。でも、42761の1143533乗 % 48799とけたを大きくすると余り 0 とでます。どのように、プログラムを変えればよいのですか?


No.3242

Re:教えてください。
投稿者---すず(2002/10/30 14:40:34)


こんにちは。すずです。

>このプログラムは、入力する桁が小さければ大丈夫です。

型宣言されたものには、扱える数値の範囲というものがあります。
それに気をつけてコーディングされてはいかがでしょうか。
以下にその範囲を示します。

char -128〜127
int -32768〜32767
long -2147483648〜2147483647
float 3.4E-38〜3.4E+38
double 1.7E-308〜1.7E+308



No.3243

補足です。
投稿者---すず(2002/10/30 14:43:43)


>以下にその範囲を示します。

扱える数値の範囲は、処理系によって異なります。

No.3244

Re:教えてください。
投稿者---かずま(2002/10/30 15:11:01)


> このプログラムは、入力する桁が小さければ大丈夫です。
> でも、42761の1143533乗 % 48799とけたを大きくすると余り 0 とでます。
> どのように、プログラムを変えればよいのですか?
#include <stdio.h>

int main(void)
{
    unsigned int x, y, z, m = 1;

    printf("x の y乗 を z で割った余りを求めます。\n");
    if (scanf("%d%*c%d%*c%d", &x, &y, &z) != 3) return 1;
    while (y--) m = m * x % z;
    printf("余りは %d です。\n", m);
    return 0;
}