Hzu挑战自我


私信TA

用户名:gxhzxyjsj

访问量:98830

签 名:

2024终究会过去,期待2025!

等  级
排  名 8
经  验 27865
参赛次数 67
文章发表 157
年  龄 0
在职情况 教师
学  校 贺州学院
专  业 软件工程

  自我简介:

弱鸡一个,继续努力!

解题思路:

    为了节省空间,全部都用字符串保存数据。

    字符串a,b,c分别保存大整数a,b,c;先逆序a,b,然后从低位开始求和一直到最高位即可。

    (1)输入a,b;

    (2)逆序a,b,并求和放到c中;

    (3)逆序c,最后输出结果即可。


注意事项:

     注意进位问题,每一步都可能有进位,最后也还会可能有进位。


参考代码:

#include <bits/stdc++.h>
using namespace std; 
const int N=1010;
int main() 
{
    char a[N],b[N]; //保存大整数a,b 
    char c[N];     //保存最后结果 
    cin>>a;
    cin>>b;
    int lena=strlen(a); //求a的长度 
    int lenb=strlen(b); //求b的长度
    reverse(a,a+lena);  //逆序a 
    reverse(b,b+lenb);  //逆序b 
    int lenc=lena>lenb?lena:lenb; //c的长度 
    int min=lena<lenb?lena:lenb;  //最小长度 
    int carry=0;        //进位 
    for(int i=0;i<min;i++) 
    {
    	int temp=(a[i]-'0')+(b[i]-'0')+carry;
    	c[i]=temp%10+'0';
    	carry=temp/10;   	
    }
	if(lena>lenb)  //a比较长,则把a剩余部分放到c中去,但是要考虑进位 
    {
    	for(int i=lenb;i<lena;i++)
    	{
    		int temp=(a[i]-'0')+carry;
    		c[i]=temp%10+'0';
    		carry=temp/10;
    	}   		
    }
    else if(lenb>lena)  //b比较长,则把b剩余部分放到c中去,但是要考虑进位 
    {
    	for(int i=lena;i<lenb;i++)
    	{
    		int temp=(b[i]-'0')+carry;
    		c[i]=temp%10+'0';
    		carry=temp/10;
    	}    	
    }
    if(carry==1)  //最后如果有进位 
	{
		c[lenc++]='1';
	}
	c[lenc]=0; //字符串结束标记 
	reverse(c,c+lenc); //逆序c 
	cout<<c;    //输出字符串c 
    return 0;
}


 

0.0分

0 人评分

  评论区

  • «
  • »