TSOJ--pow(a,b) [ 数据加强版 ]
Posted acmblog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TSOJ--pow(a,b) [ 数据加强版 ]相关的知识,希望对你有一定的参考价值。
题目描述
22 的 4 次方的运算结果为 234256,结果的个位数为 6
现请问 a 的 b 次方的运算结果的个位数是多少?
输入描述
有多组测试数据,每组测试数据在一行上
在每组数据中,有以 pow(a,b) 的形式呈现的一个正整数 a 和另一个非负整数 b ( a 与 b 都不超过 2,147,483,647 )
输出描述
a 的 b 次方的运算结果的个位数
输入样例
pow(2,3)
pow(22,4)
pow(2147483646,2147483646)
输出样例
8
6
6
题解: 本题一看就是要用到字符串的处理,将输入作为字符串输入进去,然后开始提取数字,本来想使用atoi函数但是还是有局限性
只能依靠数组进行处理,这题数据加强版只能找一个巧妙地方法,我是用打表的方式,下面就附上我的代码
说明一下这中幂运算的个位数的最后数值只与之前个位数以及次方有关所以我只先写出这种规律然后找到就好了
代码:
1 #include<iostream> 2 #include<cmath> 3 #include<cstring> 4 using namespace std; 5 int num[10][10]={{0,0,0,0,0,0,0,0,0,0},{1,1,1,1,1,1,1,1,1,1},{2,4,8,6,2,4,8,6,2,4}, 6 {3,9,7,1,3,9,7,1,3,9},{4,6,4,6,4,6,4,6,4,6},{5,5,5,5,5,5,5,5,5,5}, 7 {6,6,6,6,6,6,6,6,6,6},{7,9,3,1,7,9,3,1,7,9},{8,4,2,6,8,4,2,6,8,4},{9,1,9,1,9,1,9,1,9,1}}; 8 int main() 9 { 10 long long result; 11 long long a; 12 long long b; 13 int n; 14 string arr; 15 int k,t; 16 int brr[40]; 17 while(cin>>arr){ 18 memset(brr,0,sizeof(brr)); 19 for(int i=0;i<arr.size();i++) 20 { 21 if(arr[i]>=‘0‘&&arr[i]<=‘9‘){ 22 brr[i]=arr[i]-‘0‘; 23 t=i; 24 } 25 26 if(arr[i]==‘,‘){ 27 k=i; 28 } 29 30 } 31 a=0;b=0; 32 for(int j=4;j<k;j++) 33 { 34 a+=brr[j]; 35 a*=10; 36 } 37 a/=10; 38 for(int j=k+1;j<=t;j++) 39 { 40 b+=brr[j]; 41 b*=10; 42 } 43 b/=10; 44 int x1=a%10; 45 int x2=(b%10)-1; 46 if(x2<0) 47 cout<<num[x1][10]<<endl; 48 else 49 cout<<num[x1][x2]<<endl; 50 } 51 return 0; 52 }
以上是关于TSOJ--pow(a,b) [ 数据加强版 ]的主要内容,如果未能解决你的问题,请参考以下文章