您的位置:首页 > 产品设计 > UI/UE

UVA - 424 Integer Inquiry

2014-09-19 08:44 302 查看
题目大意:求给出的整数的和

解体思路:将数放在数组中,再进行运算

有个bug,第61行的count2<len1那,因为num1数位增加后,但len1仍没有变,所以造成的错误,输入数字99 和9999就会得到错误结果

#include<cstdio> 
#include<cstring>

int main() {

	char end[200];
	char num1[200];
	char num2[150];
	int number1[200];
	int number2[100];
	int len1;
	int len2;
	memset(num1,'\0',sizeof(num1));
	gets(num1);
	len1 = strlen(num1); 
	if(len1 == 1 && num1[0] == 0) 
		return 0;
	for(int i = 0; i < len1 / 2 ; i++) {
		char temp;
		temp = num1[i];
		num1[i] = num1[len1 - i - 1];
		num1[len1 - i - 1] = temp;
	}//先倒置
	
	while(gets(num2)) {
	
	if(strlen(num2) == 1 && num2[0] == '0')
		break; //判断是否为零	
	int num;	
	len2 = strlen(num2);
	len1 = strlen(num1);
	int len3;
	int mark = 0 ;
	if(len1 < len2) {
	
		for(int i = 0; i <= len2 - len1 + 1; i++) 
			num1[len1 + i ] = '0' ;	
	} //  num1的数位总比num2大1    
	else if(len1 == len2) 
		num1[len1] = '0';//    num1的位数总比num2大1
for(int i = 0; i < len2 / 2 ; i++) {
		char temp;
		temp = num2[i];
		num2[i] = num2[len2 - i - 1];
		num2[len2 - i - 1] = temp;
	}// 将len2倒置
	int count;//记录取到第几个
	for(count = 0; count < len2; count++) {
		num =( num1[count] - '0') +( num2[count] - '0' ) + mark;
		if(num >= 10) { 
			mark = 1;	
			num = num - 10;
	}
		else
			mark = 0;
		num1[count] = num + '0';
		num = 0;
	}
	int count2;
	if(mark == 1)
		for( count2 = count; count2 < len1; count2++) {
			num = num1[count2] - '0' + mark;
		if(num >= 10) 
			num = num - 10;	
		else{
			num1[count2] = num + '0';
			mark = 0;
			break;
		}
		num1[count2] = num + '0';		
		}
	if(count2 == len1 && mark == 1) 
		num1[len1] = '1';
	memset(num2,'\0',sizeof(num2));
	}
	
	len1 = strlen(num1);
	//len3取最小值的位数
	if(num1[len1 - 1] != '0')
		printf("%c",num1[len1 -1]);
for(int i = len1 - 2; i >= 0; i--) {
		
		printf("%c",num1[i]);

	}
	printf("\n");
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: