http://acm.hdu.edu.cn/showproblem.php?pid=1229
此题为模拟类。
刚开始我的解答为:
#include <cstdlib>
#include <iostream>
#include <cmath>
using namespace std;
int main(int argc, char *argv[])
{
int a=0,b=0,k=0;
while(cin>>a>>b>>k&&a!=0&&b!=0)
{
int tmp1=a%(int)(pow(10,(double)k));cout<<tmp1<<"k:"<<k<<" "<<(int)(pow(10,(double)k))<<endl;//0
int tmp2=b%(int)(pow(10,(double)k));cout<<tmp2<<endl;//10
if(tmp1==tmp2)
cout<<-1<<"*"<<endl;
else
cout<<a+b<<"*"<<endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}
结果用 108 8 2这个用例测试不能通过。分析原因主要是应为pow函数的精度转换问题。
后来网上查找了一下别人的思路:
修改代码后AC:
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int a=0,b=0,k=0;
while(cin>>a>>b>>k&&a!=0&&b!=0)
{
int n=1;
while(k--)
{
n*=10;
}
int tmp1=a%n;
int tmp2=b%n;
if(tmp1==tmp2)
cout<<-1<<endl;
else
cout<<a+b<<endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}