幂
题目描述:
在学习循环的时候,我们都练习过利用循环计算a的k次方。现在给定整数k和一个整数M,请你求出对应的整数a,使得a的k次方是不超过M并且最接近M的数值。
输入数据:
一个整数T表示测试组数。
对于每组测试数据:
给定两个整数k和M
输出数据:
对于每组数据,输出一个整数a。每组输出各占一行。
数据范围:
1 <= T <= 20
1 <= k <= 10^9
0 <= a <= 10^9
0 <= M <= 10^100
题目输出:
对于每组输入,输出一个数表示a。
Sample input
2
2 4
3 27
Sample output
2
3
当时校赛没有做出来。。。其实都是一直在那个从dauble转换为int型在纠结,结果是没有做对啊!
很郁闷的,一个double数据为41.00000,用强制类型转换后就变为40了,而2.000000转换后为2了,很是郁闷啊,当时都不知道该怎么改了,不过刚刚又该了一下,目前和测试的数据是过了,具体的就不多说啦!
#include<iostream>
#include<cmath>
#include<string>
using namespace std;
int main()
{
char m[105];
int k,T,i;
double a,p;
cin>>T;
while(T--)
{
cin>>k;
scanf("%s",m);
int len=strlen(m);
p=m[0]-'0';
if(len<16)
{
for(i=1; i<len; i++)
p+=(m[i]-'0')*1.0/pow(10,i);
}
else
{
for(i=1; i<16; i++)
p+=(m[i]-'0')*1.0/pow(10,i);
}
p=log10(p);
p=(p+len-1)/k;
a=pow(10,p);
printf("%.0lf\n",a);
}
return 0;
}