| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
最新发现.~~~....请HAWK解释一下.In Reply To:请大牛解释一下~为什么用g++ long long就RUNTIME ERROR, c++ __int64 就AC, 如果比赛碰到这种问题,还不栽了..... Posted by:cannie at 2005-10-18 23:47:00 #include <stdio.h>
#include <math.h>
#include <iostream.h>
long long finda(long long k){
char s[30];
long long tot, i, res, m;
long long d[30] = {0, 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000,
100000000, 1000000000};
tot = 0;
for (i = 1;; i++){
//if (i >= 29) while (1);
if (tot + i * (d[i+1] - d[i]) >= k - tot)
break;
tot = tot + i * (d[i+1] - d[i]);
}
res = k - tot;
m = (res - 1) % i;
res = (res - 1) / i;
res += d[i];
sprintf(s, "%lld", res);
return s[m] - '0';
}
long long findb(long long k){
char s[30];
long long tot, i, res, m;
long long d[30] = {0, 1, 4, 10, 32, 100, 317, 1000, 3163, 10000, 31623,
100000, 316228, 1000000, 3162278, 10000000, 31622777,
100000000, 316227767, 1000000000};
tot = 0;
for (i = 1;; i++){
//if (i >= 29) while (1);
if (i * (d[i+1] - d[i]) >= k - tot)
break;
tot = tot + i * (d[i+1] - d[i]);
}
res = k - tot;
m = (res - 1) % i;
res = (res - 1) / i;
res += d[i];
sprintf(s, "%lld", res * res);
return s[m] - '0';
}
int main(){
long long k, res, tmp;
// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
k = 0; /////////注意这: 如果把这句去了TLE,不去就WA............难道这也是程序问题????///////希望HAWK能够解释一下.
while (scanf("%lld", &k) == 1 && k > 0){
if (k > 2147483647) while (1);
//if (k == 0) break;
res = finda(k) + findb(k);
k++;
tmp = finda(k) + findb(k);
while (tmp == 9){
k++;
tmp = finda(k) + findb(k);
}
if (tmp > 9)
res ++;
printf("%lld\n", res % 10);
}
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator