我的错误点在于:
在计算n位数时,将循环变量轻易改变,导致进入死循环。
还有一点需要注意的是 这道题的正整数A,B范围是0 < A, B < 1010
所以需要用long long型变量来储存最后的结果,然后用char型数组储存A,B
#include<iostream> #include<stdio.h> #include<string.h> using namespace std;
//创造这样的数字:createNumber(3,6)=>666 long long createNumber(int n,int d) { long long result=0; for(int i=0;i<n;i++) { long long sum=d; int j=i; while(j!=0) { sum=sum*10;j--; } result+=sum; //printf("%lld\n",result); } return result; }
//获取a数组中与da相同的元素个数 int getNumber(char *a,char da) { int n=strlen(a); int result=0; for(int i=0;i<n;i++) { if(da==a[i]) result++; } return result; } int main() { char a[10],b[10]; long long pa,pb; char da,db;//从输入中得到的char型变量DA int numeric_da,numeric_db;//DA的int型变量 scanf("%s %c %s %c",&a,&da,&b,&db); int na=getNumber(a,da); int nb=getNumber(b,db); numeric_da=(int)(da-'0'); numeric_db=(int)(db-'0'); //printf("%d %d\n",numeric_da,numeric_db); pa=createNumber(na,numeric_da); pb=createNumber(nb,numeric_db); printf("%lld",pa+pb); //createNumber(3,6); }