这道题目细节琐碎,稍不注意就会WA ,特别是大数的范围,一开始没有把n声明为long long 导致最大的那个数 2147483647 结果为0 还有一开始用了 pow() 这个函数,也应该用double去接受结果。
#include<iostream> #include<string> #include<string> #include<string.h> #include<stdio.h> #include<queue> #include<math.h> #include<vector> #include<stdlib.h> #include<algorithm> using namespace std; int main(){ int cnt,t; long long n,sum,temp,m=0; while(cin>>n){ m++;sum=0,cnt=0; t=sqrt(n+1); if(n==0) break; printf("Case %d: ",m); if(n==1) {cout<<2<<endl;continue;} for(int i=2;i<=t;i++){ if(n%i==0){ cnt++; temp=1; while(n%i==0){ temp*=i; n=n/i; } sum+=temp; } } if(n>1){ sum+=n; cnt++; } if(cnt==1) {printf("%lld ",sum+1);} else if(cnt==0) printf("%lld ",n+1); else printf("%lld ",sum); } return 0; }