标签:
小明正看着 203879 这个数字发呆。注意:不要书写其它的内容(比如:说明性的文字)。
思路:i*i时,范围为12位数,超过了int的范围,因此要记录它的位数,有一个思路是模拟乘法的运算,用其中的一个数从低位到高位依次乘以另外一个数,具体存储请看我的ok1函数
AC代码:
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int flag[10]; int num[6]; bool ok(int n) { int cnt=0; while(n) { if(flag[n%10]) return false; num[cnt++]=n%10; flag[n%10]++; n/=10; } return true; } bool ok1(int n) { int t=0,j; for(int j=0;j<6;j++) { t+=num[j]*n; if(flag[t%10])return false; t/=10; } while(t) { if(flag[t%10]) return false; t/=10; } return true; } int main() { for(int i=123456;i<=987654;i++) { memset(flag,0,sizeof(flag)); if(!ok(i)) continue; else { if(ok1(i)) { printf("%d\n",i); } } } return 0; }
2013第四届蓝桥杯 C/C++本科A组 排它平方数(2个数相乘为大数,大数位标记的方法)
标签:
原文地址:http://blog.csdn.net/u012313382/article/details/44888937