【发布时间】:2014-10-11 21:22:08
【问题描述】:
此问题来自 Hacker Earth 网站,如下所示
输入:第一行包含 t,测试用例的数量。之后有 t 行,每行包含一对空格分隔的整数,即 a 和 b。
输出:对于每个测试用例,您需要打印 a^b 中的数字总和。
约束:
1
1
1
示例输入(明文链接)
5
2 10
3 3
5 2
2 7
100 1000
示例输出(明文链接)
7
9
7
11
1
解释:考虑第一个测试用例。 2^10 = 1024
Now, 1 + 0 + 2 + 4 = 7
So, output for this test case is 7.
现在我已经解决了这个问题:
#include<stdio.h>
#define test_max 20000
#define a_max 100
#define b_max 10000
long int power(int,int);
long int check_num(int,int);
int main()
{
int t;
long int i,rem,j=0,sum=0;
long int pr;
scanf("%d",&t);
int a[t],b[t];
for(i=0;i<t;i++)
{
scanf("%d",&a[i]);
scanf("%d",&b[i]);
if(a[i]>a_max||a[i]<=0||b[i]>b_max||b[i]<=0)
{
// printf("Please Check the Enter number limitation");
exit(0);
}
}
for(i=0;i<t;i++)
{
int check=0;
check=check_num(a[i],b[i]);
if(check==0)
{
pr=power(a[i],b[i]);
//printf("%d\t%d\t%ld\t",a[i],b[i],pr);
while(pr!=0)
{
rem=pr%10;
sum=sum+rem;
pr=pr/10;
}
printf("%d\n",sum);
sum=0;
}
else if(check==1)
{
printf("1\n");
}
}
return 0;
}
long int check_num(int a,int b)
{
if(a==100||a==10||a==1) return 1;
else return 0;
}
long int power(int n,int p)
{
int i;
long int num=n;
for(i=1;i<p;i++)
{
num=num*n;
}
return num;
}
但这不是一个完美的答案。谁能告诉我如何解决这个问题?
这个问题的链接在这里:HERE
我知道100^1000 在不使用任何库的情况下是不可能的,我只需要避免这种情况,但是如何?
【问题讨论】:
-
这里有真正的问题吗?这似乎更像是一场编码比赛。
-
@HotLicks 是的,但是比赛已经结束,我的提交无效,所以这就是我问这个问题的原因?