uva 10706 Number Sequence(数学)

uva 10706 Number Sequence(数学)

分类:没想起来数学问题

唉,被这道题虐惨了,从昨天晚上就开始做了,一直到现在才找到了一篇简短看得懂的题解,快把我的信心打掉完了,泪奔啊~~~~ 我咋没有想出来这么好的方法呢,我竟然把int的范围给记错了,题上给的值就是int的最大范围,所以我们应该开long long int的

分析:

这道题求得是第n位上的数,昨天晚上我竟然敲的是第n个数,我没理解好,输出永远是一个一位的数字。。。看的题解是先求出所求位是在哪一个序列中(序列的意思是1-n,如第3个序列是1,2,3,第四个序列是1,2,3,4)然后找到该序列上所求位的数字就行了,求得时候把每一个数都存到数组里面

贴代码:

#include<iostream>#include<stdio.h>#include<stdlib.h>#include<string.h>using namespace std;long long int a[10];int main(){long long int T,i,j,sum,m,n,pre,s;cin >> T;//scanf("%lld",&T);while(T–){s = 0;m = 0;pre = 0;//scanf("%d",&n);cin >> n;for(i=1; ; i++){j=i;sum = 0;//sum用来存储j是多少位的数while(j!=0){j=j/10;sum++;}m += sum;//m用来存从1-j序列的位数s += m;//s用来存储s1,s2,…sj的位数if(s >= n)break;pre = s;}n -= pre;//这时候的n就是某从一开始的序列的第n位 //cout << n << endl;s = 0;for(i=1; ; i++){j=i;sum = 0;//sum用来存储j的位数while(j!=0){a[sum++] = j%10;//该数组用来存储j每一位上的数字 ,注意是反着存的,比如123,存到数组里是3 2 1j/=10;}s += sum;//s表示当前一共有多少位if(s >= n)break;}cout << a[s-n] << endl;//准确的输出该位上的数字其实是由sum-【n-(s-sum)】变形所得 //printf("%lld\n",a[s-n]);}return 0;}

版权声明:本文为博主原创文章,未经博主允许不得转载。

上一篇uva 270 Lining Up(暴力)

顶0踩0

,可以有一个人陪着你,也可以你一个人,总之那一刻,

uva 10706 Number Sequence(数学)

相关文章:

你感兴趣的文章:

标签云: