九度OJ 1119 Integer Inquiry
2016-08-09 18:58
375 查看
题目描述:
One of the first users of BIT's new supercomputer was Chip Diller.
He extended his exploration of powers of 3 to go from 0 to 333 and he explored taking various sums of those numbers.
"This supercomputer is great,'' remarked Chip.
"I only wish Timothy were here to see these results.''
(Chip moved to a new apartment, once one became available on the third floor of the Lemon Sky apartments on Third Street.)
输入:
The input will consist of at most 100 lines of text, each of which contains a single VeryLongInteger. Each VeryLongInteger will be 100 or fewer characters in length, and will only contain digits (no VeryLongInteger will be negative).
The final input line will contain a single zero on a line by itself.
输出:
Your program should output the sum of the VeryLongIntegers given in the input.
样例输入:
样例输出:
题目意思是实现多个大整数相加。一直认为九度OJ上的题目出的意思都不是很明确,或者说不严谨。
我刚开始以为几个整数因为存在前导0,所以长度都一样,后来发现理解错了。这里的长度是可以不一样的。
我的思路是,每次输入一个str,就把它加到result中,最后输出result的值。输出的时候要把前导0去掉。还有如果两个00相加,结果是0,要把这时的0输出出来。
还有一点要注意,在每次把str加到result中时,最高位如果大于9,要把它进到高位去,以防出现溢出。
#include <iostream>
#include <cstring>
using namespace std;
int result[101];
void add(string str){ //实现将str加到result中
int len = str.length();
int i = 0;
for(i=0;i<len;i++){
int temp = result[100-i] + str[len-1-i] - '0';
result[100-i] = temp % 10;
result[100-i-1] += temp / 10;
}
while(result[100-i] > 9){ //将最高位的多位数化为个位数,
int temp = result[100-i];
result[100-i] = temp % 10;
result[100-i-1] += temp / 10;
i++;
}
}
int main(){
string str;
memset(result,0,sizeof(result));
while(cin>>str){
if(str == "0")
break;
else{
add(str);
}
}
bool flag = true;
int count = 0;
for(int i=0;i<101;i++){
if(result[i] == 0 && flag){ //把前导0去掉
count ++;
continue;
}
else{
flag = false;
cout<<result[i];
}
}
if(count == 101)
cout<<0<<endl; //表示0和0相加
cout<<endl;
return 0;
}
One of the first users of BIT's new supercomputer was Chip Diller.
He extended his exploration of powers of 3 to go from 0 to 333 and he explored taking various sums of those numbers.
"This supercomputer is great,'' remarked Chip.
"I only wish Timothy were here to see these results.''
(Chip moved to a new apartment, once one became available on the third floor of the Lemon Sky apartments on Third Street.)
输入:
The input will consist of at most 100 lines of text, each of which contains a single VeryLongInteger. Each VeryLongInteger will be 100 or fewer characters in length, and will only contain digits (no VeryLongInteger will be negative).
The final input line will contain a single zero on a line by itself.
输出:
Your program should output the sum of the VeryLongIntegers given in the input.
样例输入:
123456789012345678901234567890 123456789012345678901234567890 123456789012345678901234567890 0
样例输出:
370370367037037036703703703670
题目意思是实现多个大整数相加。一直认为九度OJ上的题目出的意思都不是很明确,或者说不严谨。
我刚开始以为几个整数因为存在前导0,所以长度都一样,后来发现理解错了。这里的长度是可以不一样的。
我的思路是,每次输入一个str,就把它加到result中,最后输出result的值。输出的时候要把前导0去掉。还有如果两个00相加,结果是0,要把这时的0输出出来。
还有一点要注意,在每次把str加到result中时,最高位如果大于9,要把它进到高位去,以防出现溢出。
#include <iostream>
#include <cstring>
using namespace std;
int result[101];
void add(string str){ //实现将str加到result中
int len = str.length();
int i = 0;
for(i=0;i<len;i++){
int temp = result[100-i] + str[len-1-i] - '0';
result[100-i] = temp % 10;
result[100-i-1] += temp / 10;
}
while(result[100-i] > 9){ //将最高位的多位数化为个位数,
int temp = result[100-i];
result[100-i] = temp % 10;
result[100-i-1] += temp / 10;
i++;
}
}
int main(){
string str;
memset(result,0,sizeof(result));
while(cin>>str){
if(str == "0")
break;
else{
add(str);
}
}
bool flag = true;
int count = 0;
for(int i=0;i<101;i++){
if(result[i] == 0 && flag){ //把前导0去掉
count ++;
continue;
}
else{
flag = false;
cout<<result[i];
}
}
if(count == 101)
cout<<0<<endl; //表示0和0相加
cout<<endl;
return 0;
}
相关文章推荐
- 九度OJ 题目1119:Integer Inquiry
- 九度oj-1119-Integer Inquiry
- 九度OJ 1119:Integer Inquiry(整数相加) (大数运算)
- 九度OJ 1119:Integer Inquiry(整数相加) (大数运算)
- 九度oj 1119
- [cut point] ZOJ 1119 SPF
- 九度OJ 1010:A + B 用map映射英文与数字的关系
- 九度OJ题目1420:Jobdu MM分水果
- 题目1101:计算表达式 九度OJ
- Integer Inquiry
- 九度OJ 题目1116:加减乘除
- 九度OJ 教程34 (完全二叉树)树的查找
- 九度OJ 题目1195:最长&最短文本
- 浮点数加法 九度oj
- UVa 424 - Integer Inquiry
- 九度OJ1096 日期差值
- UVa 424 Integer Inquiry
- VIJOS 1119 Car的旅行路线
- 九度OJ 1063: 整数和
- (概念题)线段树 HOJ 1119 Atlantis