c语言中m与n的乘积,c语言程序,运算2个整数的乘积和2的n次方减1,然会输出一个10? 爱问知识人...

计算2的n次方,这个n过大也不行,我试过,2的20000次方还可以,再大就会出问题了。。

次方的数量级增长实在是很快。。没办法。。

以下是我的程序。。

#include

#include

#include

#define N 20000//最大位数。

void Add (char *ch1 , char *ch2 , char *ch3)

{// ch3 = ch1 ch2;

int len1 = strlen (ch1) , len2 = strlen (ch2) , len3 , i , tmp , num1[N] , num2[N] , num3[N];

memset (num1 , 0 , sizeof(num1));

memset (num2 , 0 , sizeof(num2));

memset (num3 , 0 , sizeof(num3));

for (i=len1-1;i>=0;i--) num1[len1-1-i] = ch1[i] - 48; for (i=len2-1;i>=0;i--) num2[len2-1-i] = ch2[i] - 48;

i = 0 , tmp = 0 , len3 = len1 > len2 ? len1 : len2;

while (i = 10) { tmp = num3[i]/10; num3[i] %= 10; }

i ;

}

if (tmp != 0) { num3[i] = tmp; i ; }

len3 = i;

for (i=len3-1;i>=0;i--) ch3[len3-1-i] = num3[i] 48;

ch3[len3] = ' ';

return ;

}

void Minus (char *ch1 , char *ch2 , char *ch3)

{ // 保证 ch1 > ch2 : ch3 = ch1 - ch2

int i , tmp , len1 = strlen (ch1) , len2 = strlen (ch2) , len3 , num1[N] , num2[N] , num3[N];

memset (num1 , 0 , sizeof(num1));

memset (num2 , 0 , sizeof(num2));

memset (num3 , 0 , sizeof(num3));

for (i=0;i len2 ? len1 : len2;

while (i 1 && num3[len3-1] == 0) len3 --;

for (i=0;i=0;i--) num1[len1-1-i] = ch1[i] - 48; for (i=len2-1;i>=0;i--) num2[len2-1-i] = ch2[i] - 48;

for (i=0;i= 10) { tmp = num3[i j]/10; num3[i j] %= 10; }

}

while (tmp != 0) { num3[i j] = tmp; tmp = num3[i j]/10; j ; }

}

len3 = len1 len2;

while (len3 > 1 && num3[len3-1] == 0) len3 --;

for (i=0;i ch2 return 1;  ch1 len2) return 1;

if (len2 > len1) return -1;

for (i=0;i ch2[i]) return 1;

if (ch1[i] < ch2[i]) return -1;

}

return 0;

}

int main()

{

char p[N], q[N];

char n[N] = "";

char j[N], i[N] = "1";

char temp[N], result[N] = "1";

printf("计算p与q的乘积:

");

printf("p = ");

gets(p);

printf("q = ");

gets(q);

MUL(p, q, n);

printf("n = p*q = %s

", n);

printf("

");

printf("计算2的n次方减1:

");

printf("n = ");

gets(n);

for ( ; cmp(i, n) != 1; Add(j, "1", i))

{

strcpy(temp, result);

MUL(temp, "2", result);

strcpy(j, i);

}

strcpy(temp, result);

Minus(temp, "1", result);

printf("2^n-1 = %s

", result);

getch();

return (0);

}。

全部

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值