|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
以下程序完成两个长正整数的加法运算并输出计算结果。函数add模拟手工加法运算的过程,将a和b指向的数组中存储的两个以字符串形式表示的n位正整数相加,并将运算结果以字符串形式保存到c指向的数组中。main函数中p1和p2数组分别存放被加数字符串和加数字符串,p3数组存放运算结果字符串。若p1中的字符串为"1000000001"、p2中的字符串为"9000000009",调用add函数后p3得到的是以字符串表示的这两个整数相加的结果"10000000010"。试完善程序以达到要求的功能。
#include "stdio.h"
#include "string.h"
void add(char a[],char b[],char c[], int n )
{ int i,k;
c[n]='\0'; k=0;
for(i=n-1;i>=0;i--)
{ c[i]=(a[i]-'0')+(b[i]-'0')+k; // 为啥有减去‘0’,这表示啥呀?
k= c[i]/10 ;
c[i]=c[i]%10+'0';
}
if(k)
{ for(i=n+1;i>0;i--)
c[i]= c[i-1] ;
c[i]=k+'0';
}
main()
{ char p1[80]="1000000001",p2[80]="9000000009",p3[80];
int i,x=strlen(p1),y=strlen(p2);
if(x<y)
{ for(i=x;i>=0;i--)
{ p1[i+y-x]=p1[i]; p1[i]='0'; } // 为啥还要p1[i]='0'
x=y ;
}
if(x>y)
for(i=y;i>=0;i--)
{ p2[i+x-y]=p2[i]; p2[i]='0'; }
add(p1,p2,p3,x);
puts(p3);
}
- #include<stdio.h>
- #include<string.h>
- void add(char a[], char b[], char c[], int n)
- {
- int i, k;
- c[n] = '\0'; k = 0;
- for (i = n - 1;i >= 0;i--)
- {
- c[i] = (a[i] - '0') + (b[i] - '0') + k; // 将字符型数字转换为整型数字进行运算
- k = c[i] / 10; // 取进位(大于10就有进位)
- c[i] = c[i] % 10 + '0'; // 将整型数字转换为字符型数字存入c[i]
- }
- if (k)
- {
- for (i = n + 1;i > 0;i--)
- c[i] = c[i - 1];
- c[i] = k + '0';
- }
- } // 少了一个花括号
- int main()
- {
- char p1[80] = "1000000001", p2[80] = "900000009", p3[80];
- int i, x = strlen(p1), y = strlen(p2);
- if (x < y)
- {
- for (i = x;i >= 0;i--)
- {
- p1[i + y - x] = p1[i];
- p1[i] = '0'; // p1[i]的数住后移了,该位上的数置'0',确保最前面没有数的位是0
- }
- x = y;
- }
- if (x > y)
- for (i = y;i >= 0;i--)
- {
- p2[i + x - y] = p2[i];
- p2[i] = '0';
- }
- add(p1, p2, p3, x);
- puts(p3);
- }
复制代码
|
|