这个问题是在一个坑----即使在使用long long 这将是超出范围
自己显得很长的时间去阅读很多次的称号仍然没想到
当时的想法是要记住----无论如何,我用long long 已经最大范围。当然不能用更大的类型--即使unsigned它是唯一的 比long long 大一倍。如今回头看,这样的想法太唯心,不是理性分析的结果啊,,
代码:
//1005 #include <cstdio> #include <cstring> #include <algorithm> #include <cstdlib> #include <iostream> using namespace std; #define ll long long const ll lim=1e5; int main() { //freopen("hdu1005.txt","r",stdin); ll cnt,ans,kr,sp,n; char c; int last; bool flag=0; while(~scanf("%I64d",&n)) { flag=0; getchar(); cnt=kr=sp=0; ans=1; while(1) { c=getchar(); if(c == ' ')cnt++; if(cnt>=n || c==EOF)break; //{} if(c == '$') { kr=last=0; while(1) { c=getchar(); if(c == ' '){cnt++;if(kr)last=1;continue;} if(c == ' ')kr++; //if(c != ' ' && c == ' ')conti if(c != ' ' && kr){if(ans>lim)flag=1;ans*=(kr+1);kr=0;} if(c == '$')break; } if(c != ' ' && kr){if(ans>lim)flag=1;ans*=(kr+1);kr=0;} //// } if(c == '{') { sp=0; while(1) { c=getchar(); if(c == ' '){cnt++;} if(c == '|'){sp++;} if(c == '}')break; } if(ans>lim)flag=1; ans*=(sp+1); sp=0; } } if(ans>lim||flag)printf("doge "); else printf("%I64d ",ans); } return 0; }