HDU--1002
来源:互联网 发布:美工详情页一般多少钱 编辑:程序博客网 时间:2024/06/05 04:27
点击打开原题
大数的加法
自己重新定义了一下加法,有点复杂
#include <iostream>#include <vector>using namespace std;int main(){ int T, i, j, ia, ib,is; char ch; vector<char> *cSum; vector<int> *iA, *iB; cin >> T; iA = new vector<int>[T]; iB = new vector<int>[T]; cSum = new vector<char>[T]; ch = getchar(); for (i = 0; i < T; i++) { while ((ch=getchar())!=' ') { ia = ch - '0'; iA[i].push_back(ia); } while ((ch = getchar()) !='\n') { ib = ch - '0'; iB[i].push_back(ib); } } int h; for (i = 0; i < T; i++) { int carry = 0;//进位 if (iA[i].size() >= iB[i].size()) { for (j = iA[i].size(), h = iB[i].size(); h > 0; j--, h--) { is = iA[i][j - 1] + iB[i][h - 1] + carry; if (is > 9) { carry = 1; is -= 10; ch = is + '0'; cSum[i].push_back(ch); if (j == 1) cSum[i].push_back('1'); } else { carry = 0; ch = is + '0'; cSum[i].push_back(ch); } } for (j = iA[i].size() - iB[i].size() - 1; j >= 0; j--) { is = iA[i][j] +carry; if (is > 9) { carry = 1; if (j != 0) is -= 10; } else { carry = 0; } ch = is + '0'; cSum[i].push_back(ch); } } else { for (j = iB[i].size(), h = iA[i].size(); h > 0; j--, h--) { is = iB[i][j - 1] + iA[i][h - 1] + carry; if (is > 9) { carry = 1; is -= 10; ch = is + '0'; cSum[i].push_back(ch); if (j == 1) cSum[i].push_back('1'); } else { carry = 0; ch = is + '0'; cSum[i].push_back(ch); } } for (j = iB[i].size() - iA[i].size() - 1; j >= 0; j--) { is = iB[i][j] + carry; if (is > 9) { carry = 1; if (j != 0) is -= 10; } else { carry = 0; } ch = is + '0'; cSum[i].push_back(ch); } } } for (i = 0; i < T; i++) { if (i != 0) cout << endl; cout << "Case " << i+1 << ":\n"; for (j =0; j < iA[i].size(); j++) { cout << iA[i][j]; } cout << " + "; for (j = 0; j < iB[i].size(); j++) { cout << iB[i][j]; } cout << " = "; for (j = cSum[i].size() - 1; j >= 0; j--) { cout << cSum[i][j]; } cout << endl; } return 0;}看看别人写的,真简洁
#include <stdafx.h>#include<stdio.h>#include<string.h>void bigSum_1(void);int main(){bigSum_1();}void bigSum_1(void){char a[1000],b[1000],c[1001];int i,j=1,p=0,n,n1,n2;//i是c的下标,j是case j,p是进位的标记,n是行数,n1n2是要加的数的最后一位的下标scanf("%d",&n); while(n)//n是行数,后面使用n--来重复输入{scanf("%s %s",a,b);printf("Case %d:\n",j);printf("%s + %s = ",a,b);n1=strlen(a)-1;//strlen是真正存入的最后一位的数的下标,如输入12345那么strlen为5其下标是4n2=strlen(b)-1;for(i=0;n1>=0||n2>=0;i++,n1--,n2--)//i负责表示z的下标{if(n1>=0&&n2>=0){c[i]=a[n1]+b[n2]-'0'+p;}//当两者位数相同时if(n1>=0&&n2<0){c[i]=a[n1]+p;}//位数不同if(n1<0&&n2>=0){c[i]=b[n2]+p;}p=0;if(c[i]>'9'){c[i]=c[i]-10;p=1;}//进位}if(p==1){printf("%d",p);}//如果要进位,先输出1while(i--){printf("%c",c[i]);}//倒序输出c即正着的和j++;if(n!=1){printf("\n\n");}//最后一个下面不要空行else {printf("\n");}n--;}}
1 0
- HDU 1002
- hdu 1002
- HDU-1002
- hdu 1002
- HDU 1002
- HDU 1002
- hdu 1002
- hdu 1002
- hdu 1002
- hdu 1002
- HDU 1002
- hdu 1002
- hdu 1002
- hdu 1002
- HDU 1002
- HDU 1002
- hdu 1002
- hdu 1002
- 数学分析摘要
- UNPv2第三章:System V IPC
- 为什么要用设计模式?
- qt简单入门
- Apache Zeppelin使用入门指南:安装
- HDU--1002
- LeetCode 256. Unique Word Abbreviation
- nodejs回调大坑
- C#中使用错误页面
- window7如何配置修改环境变量
- qt输入框 (ww)
- HibernateTemplate的使用方法
- 实时音视频的整体框架简介
- 从零开始配置Intellij Idea 14