大数运算(相加)



具体代码如下 先放上错误代码​(只适合位数对齐的)

#include<stdio.h>

#include<string.h>

#define N 500

int main(void)

{

char s1[N],s2[N];

int cp=0,x,k;

int R[N];

gets(s1);

gets(s2);

//放上循环变量 i(跑s1),j(跑s2), k(给R里面存值) 

int i=strlen(s1)-1;

int j=strlen(s2)-1;

k=N-1;

        while (i>-1&&j>-1)//数组没完就进循环

{

x=(s1[i--]-'0')+(s2[j--]-'0')+cp;

R[k--]=x%10;

cp=x/10;

}

if(cp)//要是cp还有值 就把进位加上去 

R[k--]=cp;

for(i=k+1;i<N;i++)//输出数值 

printf("%d",R[i]);

return 0;

}​

下面附上正确代码:

​#include<stdio.h>

#include<string.h>

#define N 500

int main(void)

{

char s1[N],s2[N];

int cp=0,x,k;

int R[N];

gets(s1);

gets(s2);

//放上循环变量 i(跑s1),j(跑s2), k(给R里面存值) 

int i=strlen(s1)-1;

int j=strlen(s2)-1;

k=N-1;

while (i>-1||j>-1)//只要有一个数组没完就进循环

{

if(i>-1&&j>-1) //两个都没完

x=(s1[i--]-'0')+(s2[j--]-'0')+cp;

else if(j>-1&&i<0)//s1完了 s2没完

x=s2[j--]-'0'+cp;//处理s2 

else

x=s1[i--]-'0'+cp;//处理s1 

R[k--]=x%10;

cp=x/10;

}

if(cp)//要是cp还有值 就把进位加上去 

R[k--]=cp;

//为什么没有让cp=cp/10;呢??

//因为加法最多进位一位所以不需要哦。

//昨天的乘法有可能进两位(100)所以要加上 

for(i=k+1;i<N;i++)//输出数值 

printf("%d",R[i]);

return 0;

}

(代码是经过运行测试可以执行出结果的!!!)

    谢谢大家支持,我会尽快更新的,大家和我一起努力哦.

    我是小纸人.

具体代码如下 先放上错误代码​(只适合位数对齐的)

#include<stdio.h>

#include<string.h>

#define N 500

int main(void)

{

char s1[N],s2[N];

int cp=0,x,k;

int R[N];

gets(s1);

gets(s2);

//放上循环变量 i(跑s1),j(跑s2), k(给R里面存值) 

int i=strlen(s1)-1;

int j=strlen(s2)-1;

k=N-1;

        while (i>-1&&j>-1)//数组没完就进循环

{

x=(s1[i--]-'0')+(s2[j--]-'0')+cp;

R[k--]=x%10;

cp=x/10;

}

if(cp)//要是cp还有值 就把进位加上去 

R[k--]=cp;

for(i=k+1;i<N;i++)//输出数值 

printf("%d",R[i]);

return 0;

}​

下面附上正确代码:

​#include<stdio.h>

#include<string.h>

#define N 500

int main(void)

{

char s1[N],s2[N];

int cp=0,x,k;

int R[N];

gets(s1);

gets(s2);

//放上循环变量 i(跑s1),j(跑s2), k(给R里面存值) 

int i=strlen(s1)-1;

int j=strlen(s2)-1;

k=N-1;

while (i>-1||j>-1)//只要有一个数组没完就进循环

{

if(i>-1&&j>-1) //两个都没完

x=(s1[i--]-'0')+(s2[j--]-'0')+cp;

else if(j>-1&&i<0)//s1完了 s2没完

x=s2[j--]-'0'+cp;//处理s2 

else

x=s1[i--]-'0'+cp;//处理s1 

R[k--]=x%10;

cp=x/10;

}

if(cp)//要是cp还有值 就把进位加上去 

R[k--]=cp;

//为什么没有让cp=cp/10;呢??

//因为加法最多进位一位所以不需要哦。

//昨天的乘法有可能进两位(100)所以要加上 

for(i=k+1;i<N;i++)//输出数值 

printf("%d",R[i]);

return 0;

}

(代码是经过运行测试可以执行出结果的!!!)

    谢谢大家支持,我会尽快更新的,大家和我一起努力哦.

    我是小纸人.

阅读更多

没有更多推荐了,返回首页