HDU 1002 怎么总是WA啊?请大牛们指点迷津
#include<iostream>#include<Cstring>usingnamespacestd;//字符串的逆转voidReverse(int*str,intl...
#include <iostream>
#include<Cstring>
using namespace std;
//字符串的逆转
void Reverse(int *str,int length)
{
int low = 0;
int high = length - 1;
while(low < high)
{
int temp = str[low];
str[low] = str[high];
str[high] = temp;
low++;
high--;
}
}
//两个数字的和
void Sum(char *str1,char *str2)
{
int str[1001];
int length1 = strlen(str1);
int length2 = strlen(str2);
int flag = 0;
int i,j,k = 0;
if(length1 >= length2)
{
for(i = length2 - 1,j = length1 - 1; i >= 0&&j>= 0; i--,j--)
{
int a = str1[j] - '0' + str2[i] - '0';
if(flag != 0)
{
a = a + 1;
}
if(a > 9)
{
a = a - 10;
flag = 1;
}
str[k] = a;
k++;
}
if((length1 == length2)&&(flag == 1))
{
str[k] = 1;
k++;
}
else
{
if(flag == 1)
{
str[k] = str1[length1 - 1 - k] - '0' + 1;
k++;
}
for(i = length1 - 1 - k; i >= 0; i--)
{
str[k] = str1[i] - '0';
k++;
}
}
}
else
{
for(i = length1 - 1,j = length2 - 1; i >= 0&&j>= 0; i--,j--)
{
int a = str2[j] - '0' + str1[i] - '0';
if(flag != 0)
{
a = a + 1;
}
if(a > 9)
{
a = a - 10;
flag = 1;
}
str[k] = a;
k++;
}
if(flag == 1)
{
str[k] = str2[length2 - 1 - k] - '0' + 1;
k++;
}
for(i = length2 - 1 - k; i >= 0; i--)
{
str[k] = str2[i] - '0';
k++;
}
}
Reverse(str,k);
for(i = 0; i < k; i++)
{
cout<<str[i];
}
cout<<endl;
}
int main()
{
char str1[1001];
char str2[1001];
cin>>str1>>str2;
Sum(str1,str2);
return 0;
} 展开
#include<Cstring>
using namespace std;
//字符串的逆转
void Reverse(int *str,int length)
{
int low = 0;
int high = length - 1;
while(low < high)
{
int temp = str[low];
str[low] = str[high];
str[high] = temp;
low++;
high--;
}
}
//两个数字的和
void Sum(char *str1,char *str2)
{
int str[1001];
int length1 = strlen(str1);
int length2 = strlen(str2);
int flag = 0;
int i,j,k = 0;
if(length1 >= length2)
{
for(i = length2 - 1,j = length1 - 1; i >= 0&&j>= 0; i--,j--)
{
int a = str1[j] - '0' + str2[i] - '0';
if(flag != 0)
{
a = a + 1;
}
if(a > 9)
{
a = a - 10;
flag = 1;
}
str[k] = a;
k++;
}
if((length1 == length2)&&(flag == 1))
{
str[k] = 1;
k++;
}
else
{
if(flag == 1)
{
str[k] = str1[length1 - 1 - k] - '0' + 1;
k++;
}
for(i = length1 - 1 - k; i >= 0; i--)
{
str[k] = str1[i] - '0';
k++;
}
}
}
else
{
for(i = length1 - 1,j = length2 - 1; i >= 0&&j>= 0; i--,j--)
{
int a = str2[j] - '0' + str1[i] - '0';
if(flag != 0)
{
a = a + 1;
}
if(a > 9)
{
a = a - 10;
flag = 1;
}
str[k] = a;
k++;
}
if(flag == 1)
{
str[k] = str2[length2 - 1 - k] - '0' + 1;
k++;
}
for(i = length2 - 1 - k; i >= 0; i--)
{
str[k] = str2[i] - '0';
k++;
}
}
Reverse(str,k);
for(i = 0; i < k; i++)
{
cout<<str[i];
}
cout<<endl;
}
int main()
{
char str1[1001];
char str2[1001];
cin>>str1>>str2;
Sum(str1,str2);
return 0;
} 展开
1个回答
展开全部
首先,你的答题格式就是错误的!
就格式而言,你应该把main()函数改成如下格式:
int main()
{
char str1[1001];
char str2[1001];
int t;
cin>>t;
while(t--)
{
cin>>str1>>str2;
Sum(str1,str2);
}
return 0;
}
这样你才可以通过样例。
///////////////////////////////////////
其次,你的算法本身就有毛病,比如当输入为 999999 1 的时候,
你的程序运行结果是 9999100
//////////////////////////////////////
该怎么解决呢?
其实,稍微有点ACM经验就会知道,这是一道简单的大数加法问题,
要用数组来进行模拟运算,你可以到我的博客中去看看,我对大数
问题做了一个简单的总结。
网址:http://hi.baidu.com/liuxiahuangtu/blog/item/0f88f80415ef321c728b65d1.html
就格式而言,你应该把main()函数改成如下格式:
int main()
{
char str1[1001];
char str2[1001];
int t;
cin>>t;
while(t--)
{
cin>>str1>>str2;
Sum(str1,str2);
}
return 0;
}
这样你才可以通过样例。
///////////////////////////////////////
其次,你的算法本身就有毛病,比如当输入为 999999 1 的时候,
你的程序运行结果是 9999100
//////////////////////////////////////
该怎么解决呢?
其实,稍微有点ACM经验就会知道,这是一道简单的大数加法问题,
要用数组来进行模拟运算,你可以到我的博客中去看看,我对大数
问题做了一个简单的总结。
网址:http://hi.baidu.com/liuxiahuangtu/blog/item/0f88f80415ef321c728b65d1.html
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询