首先判断输入数的长度(晕,不知道哪个函数).
1位数总长度有9
2位数总长度有180
3位数总长度有2700
.......
得到长度X.
如果189<X<2889(说明这个数的长度为3).用(X-189)/3得的数为这个数.余数为这个数字的数位.分别为210(就是余2为百位上的数……)。
函数有伐?提供个。见识少了点。呵呵~
晕。错了错了喃。把题目的数字的排列弄错了。郁闷!
[此贴子已经被作者于2006-12-11 19:48:49编辑过]
----------------解决方案--------------------------------------------------------
取对数应该可以吧!log10()
----------------解决方案--------------------------------------------------------
可以么?我都快忘了怎么取了喃。我记得有求长度的嘛。你也不知道嘛?
----------------解决方案--------------------------------------------------------
将一个数取对数之后加1就是这个数的长度吧!100的对数是2那么它的长度就是3。
----------------解决方案--------------------------------------------------------
汗了。弄错了。T。T再来看看。。。刚刚写成12345678901011之类的了。汗。
[此贴子已经被作者于2006-12-11 19:58:15编辑过]
----------------解决方案--------------------------------------------------------
我想问一下,版主你的题都是在那里找的?
----------------解决方案--------------------------------------------------------
浙江大学ACM里的.
第一个我还没做出来,想看看大家有什么高招.郁闷着...
大家帮忙啊
----------------解决方案--------------------------------------------------------
饿,晕这么复杂。昨天头痛。。。身体不佳。
今天上课的时候又想了想。貌似可以这样。
这里先写个算只有个位数的办法。
main()
{
long x;
int i;
scanf("%d",x);
if(x<=45)
for(i=1;;i++)
if(i*(i+1)/2>=x) break;
x=x-i*(i-1)/2;
printf("%d",x);
}
这个还没测试过。没编译器。
这里只是个位的数。也就是X不能大于45~。
2位数的也有考虑到。貌似也行。就是还有点问题。回去再想想。
[此贴子已经被作者于2006-12-12 21:31:36编辑过]
----------------解决方案--------------------------------------------------------
第一题的题意还是不怎么懂
英语水平有限.....
能介绍清楚点吗?
----------------解决方案--------------------------------------------------------
饿,不好意思。输入总是没考虑。
2位数也是类似的方法。
首先知道2位数后到99有多长,在这里我算来算去都有点问题。我晕饿。
if(x>45&&x<=2位数总长)
for(i=10;;i++)
if(i*(i+1)/2>=x)
break;
x=x-i*(i-1)/2;
这里X可能大于9,不大于就是个位数。
大于9说明是2位数。
x就减去9,然后再除以2,有余数就要在商上+1+9,就等于这个数,且是十位上的数。
没有余数就说明是个位上的数。
饿,思路是有点乱的。不知道能否看懂。我回去写写看。
----------------解决方案--------------------------------------------------------