首页 > 代码库 > 杭电1002
杭电1002
//此题的要点在于 把数字当字符串储存 用数组储存
//计算的时候注意要减去‘0’,因为那是我们的字符串
//在我们换算 的时候一定要加上temp 我就是因为没加 错了一个下午
#include <iostream> #include<string> using namespace std; int main() { int n; cin>>n; int ui=1; while(n--){ string a,b; int sum[1001];//用来放结果 cin>>a>>b; int lena,lenb; lena=a.length(); lenb=b.length(); // cout<<lena<<" "<<lenb<<endl; int ka=lena-1; int kb=lenb-1; int q=0;//用来表示数组下标 int temp=0;//用来表示进位 // cout<<a[2]+a[1]-‘0‘-‘0‘<<endl; while(lena!=0&&lenb!=0) { int numa=a[ka]-‘0‘;//和 因为string是字符类 要减去0的ascii码 int numb=b[kb]-‘0‘; //cout<<numa<<" " <<numb<<endl; sum[q]=(numa+numb+temp)%10;//我们要的是余数位 if((numa+numb+temp)>=10){ //这里的每一次判断必须加上temp进位 temp=1; }else{ temp=0; } q++; ka--; kb--; lena--; lenb--; } //cout<<a[ka]<<endl; if(lena>lenb){ while(lena){ int numa=a[ka]-‘0‘ ; sum[q]=(numa+temp)%10;//我们要的是余数位 temp=(numa+temp)/10; q++; ka--; // kb--; lena--; //lenb--; } } else if(lenb>lena){ while(lenb){ int numb=b[kb]-‘0‘; sum[q]=(numb+temp)%10; temp=(numb+temp)/10; q++; kb--; lenb--; } } else { if(temp==1){ sum[q]=1; q++; } } cout<<"Case "<<ui<<":"<<endl; ui++; int alll=a.length(); int blll=b.length(); for(int j=0;j<alll;j++) { cout<<a[j]; } cout<<" + "; for(int jk=0;jk<blll;jk++) { cout<<b[jk]; } cout<<" = "; for(int i=q-1;i>=0;i--){ cout<<sum[i]; } if(n==0){ cout<<endl; } else{ cout<<endl; cout<<endl; } } return 0; }
然而,我花了一个下午。其实就是把temp给弄错了
错误代码为:
while(lena!=0&&lenb!=0) { int numa=a[ka]-‘0‘;//和 因为string是字符类 要减去0的ascii码 int numb=b[kb]-‘0‘; //cout<<numa<<" " <<numb<<endl; sum[q]=(numa+numb+temp)%10;//我们要的是余数位 if((numa+numb)>=10){ //就是这边错了!!!!!! temp=1; }else{ temp=0; } q++; ka--; kb--; lena--; lenb--; }
bug为:
杭电1002
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。