题目翻译:
A + B问题II
问题描述
我给你的一个非常简单的问题。有两个整数A和B,你的工作是计算A的总数 A + B。
输入
输入的首行表示测试用例的个数T(1≤T≤20的整数)。接下来,每行都是两个正整数,A 和B。注意这些整数非常大,你将不能处理32位的整数。你可以假设每个整数的长度将不超过1000。
输出
对每个测试用例,你应该输出两行。首行"例#:" ,#表示测试例的数量。第2 行是一个表达式"A B = 总数",总数表示A+B的结果. 注意表达式间有空格。在两个测试用例之间输出一个空白行。
输入样例
2
1 2
112233445566778899 998877665544332211
输出样例
例1: 1 + 2 = 3
例2: 112233445566778899 + 998877665544332211 = 1111111111111111110
===============代码==================
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* 杭电
* @author 点子二木
* @version 1.0
* @date 2008-7-29
*
*/
public class Sum {
private static final String PRINT_INPUT_ERROR = "输入有误!";
static boolean inputFlag = true;
static List
/**
* @param args
*/
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入测试用例个数:");
String str = scanner.next();
// System.out.println(str);
int count = 0;
try {
count = Integer.parseInt(str);
} catch (Exception e) {
System.out.print(PRINT_INPUT_ERROR);
return;
}
if (count > 0 && count < 21) {
initCase(scanner, count);
if (!inputFlag) {
return;
}
System.out.println("/////////////结果输出//////////////////");
sumCal();
} else {
System.out.println("输入了错误的个数T(1≤T≤20的整数)!");
}
}
/**
* 求和计算
*/
private static void sumCal() {
int index = 1;
for (CaseBean cb : inputCaseList) {
long addFirst = cb.addFirst;
long addSecond = cb.addSecond;
long sum = addFirst + addSecond;
System.out.print("例" + index + ":");
System.out.println(addFirst + " + " + addSecond + " = " + sum);
System.out.println("");
index++;
}
}
/**
* 初始化一个用例
*
* @param scanner
* @param count
*/
private static void initCase(Scanner scanner, int count) {
for (int index = 0; index < count; index++) {
if (!inputFlag) {
return;
}
System.out.println("输入用例" + (index + 1) + ":");
System.out.print("请输入被加数:");
String strFirst = scanner.next();
System.out.print("请输入加数:");
String strSecond = scanner.next();
CaseBean cb = new CaseBean();
try {
cb.addFirst = Long.parseLong(strFirst);
cb.addSecond = Long.parseLong(strSecond);
} catch (Exception e) {
System.out.print(PRINT_INPUT_ERROR);
inputFlag = false;
}
inputCaseList.add(cb);
System.out.println(" ");
}
}
}
class CaseBean {
long addFirst;
long addSecond;
long sum;
}
===============结果=====================
请输入测试用例个数:
2
输入用例1:
请输入被加数:1
请输入加数:2
输入用例2:
请输入被加数:112233445566778899
请输入加数:998877665544332211
/////////////结果输出//////////////////
例1:1 + 2 = 3
例2:112233445566778899 + 998877665544332211 = 1111111111111111110
2处错误, 看注释
#include
using namespace std;
int main()
{
int T,m[20][1000],n[20][1000],s1[20],s2[20],k,s,return1[20],return2[20];
char a[20][1001],b[20][1001];//20是因为小于20次运算,1000是因为每位数小于1000个长度
cin>>T;
if(T>20||T<1)
return 0;
if(1<=T&&T<=20)
{
for(int i=0;i
cin>>a[i]>>b[i]; //输入两个加数,每一位都用一个字符表示
s1[i]=strlen(a[i]); //算出字符串长度
s2[i]=strlen(b[i]); //算出字符串长度
return1[i]=0; // 要初始化return1 //// <- 这里错了
if(s1[i]
char f[1001];
strcpy(f,a[i]);
strcpy(a[i],b[i]);
strcpy(b[i],f);
int g;
g=s1[i];
s1[i]=s2[i];
s2[i]=g;
return1[i]=1; //根据return1[i]来判断a[i]与b[i]是否交换
}
for(int j=0;j
for(int j=0;j
int j1,j2;
for(j1=s1[i]-1,j2=s2[i]-1;j2>=0;j1--,j2--) //从最低位开始
{
k=m[i][j1]+n[i][j2]; //将每一位整数相加
if(k>=10&&j1!=0) //k大于或等于10,并且两个加数总位数不同时近一位
{
m[i][j1]=k%10;
int z=j1-1;
for(;m[i][z]==9&&z>=0;z--)
{
m[i][z]=0;
}
if(z==-1)
return2[i]=1;
if(z!=-1)
m[i][z]+=1;
}
else m[i][j1]=k; //小于10的保持不变
}
}
}
for(int i=0;i
int aa=0;
cout<<"Case "< if(return1[i]!=0) //根据return1[i]来判断a[i]与b[i]是否交换
cout< else cout< if(return2[i]==1)
{cout<<"1";aa++;} // 如果输出1了,a要自增 ////////// <- 这里错了
for(int j1=0;j1
if(m[i][j1]!=0||aa!=0)
{
cout<
}
}
cout<
cout<
//system("pause");
return 0;
}