hdu 1002 A + B Problem II(大数模拟加法)

题目链接:?pid=1002

题目要求:输入t 为测试组数,然后输入两个正数 a,b求和;

【思路】

首先,用字符串读入a,b,,再将a,b 逆序存到数组中,然后对应位相加就行了,长度小的数要注意补零

倒过来做可以让进位变得方便 ,如果对应位的和大于等于10,就把余数储存在当前位置,后一位加1;

【代码】

#include <iostream>#include <string>#include <cstring>#include <cstdio>using namespace std;int main(){int n,cas=1;cin>>n;int s1[1111];int s2[1111];char a[1111];char b[1111];while(n–){memset(s1,0,sizeof(s1));memset(s2,0,sizeof(s2));memset(a,0,sizeof(a));memset(b,0,sizeof(b));cin>>a>>b;if(cas!=1)cout<<"\n";cout<<"Case "<<cas<<":"<<endl;cout<<a<<" "<<"+"<<" "<<b<<" "<<"="<<" ";int lena=strlen(a);int lenb=strlen(b);char *max=0; //放到一块定义 char *max,*min //复习一下指针char *min=0;int maxl,maxs;if(lena>=lenb){ max=a; min=b; maxl=lena; maxs=lenb;} //用max指针指向长度较大的数 min指向长度较小的数;else{ max=b; min=a; maxl=lenb; maxs=lena;}for(int i=0;i<maxl;i++){s1[i]= max[maxl-i-1]-48;//逆序存到数组}int k=0;for(int i=0;i<maxl;i++){if(i<maxs)s2[i]=(min[maxs-i-1]-48);elses2[i]=0;//后面补零}int tt;for( tt=0;tt<maxl;tt++){int ans=s1[tt]+s2[tt];if(ans>=10){s1[tt]=ans%10;s1[tt+1]+=1;}elses1[tt]=ans;}if(s1[maxl]!=0)//如果和超过maxl,maxl+1;maxl+=1;for(int i=maxl-1;i>=0;i–)cout<<s1[i];cout<<endl;cas++;}return 0;}

蚁穴虽小,溃之千里。

hdu 1002 A + B Problem II(大数模拟加法)

相关文章:

你感兴趣的文章:

标签云: