心剑菩提 发布留言 2008-8-3 10:13
X倍数问题(看完后先觉得很简单的,后来才发现容易超时还不说,还高精度)
Description
若一个整数Y的个位数为X,将X移到最高位得到的恰好是Y的X倍,称Y为一个X倍数。例如,0是一个0倍数,1是一个1倍数。
Input
无
Output
请依次输出最小的0倍数、1倍数、2倍数、……9倍数。每个X倍数输出一行。
Sample Input
无Sample Output
0
1
……
……
……
……
……
……
……
……
Hint
即使是最小的X倍数也可能是一个非常大的整数,甚至远远超出int所能表达的范围。
卧龙孔明 发布留言 2008-8-3 10:40
这个搜索是有技巧性的。
你稍加思考就可以发现,对于X倍数
个位必定是 首位的 X倍 或 X倍+1
等。
通过这些,来减少搜索量
心剑菩提 发布留言 2008-8-3 16:55
回卧龙:
题目的意思是最低位移最高位,其他位依次后移!
爱喝牛奶的猫咪 发布留言 2008-8-3 18:54
水题一个,你信不
<

>
爱喝牛奶的猫咪 发布留言 2008-8-3 18:57
2
105263157894736842
3
1034482758620689655172413793
4
102564
5
102040816326530612244897959183673469387755
6
(省略1个)
7
1014492753623188405797
8
1012658227848
9
(省略2个)
思路和我论坛第111题一样,并且更容易
<

>
woshiyun 发布留言 2008-8-3 19:51
不用搜索,基本上没有时间复杂度。
#include
#include
void fun(char* s,int n)
{
char* p=s;
int temp,jinwei;
for(*p=n+'0', jinwei=0;!(*p=='0'&&jinwei==1);p++)
((temp = (*p-'0')*n+jinwei)>9)?(*(p+1)=temp%10+'0',jinwei=temp/10):(*(p+1)=temp+'0',jinwei=0);
*++p='1',*++p='\0';
_strrev(s);
}
int main()
{
char s[200];
for (int i = 2; i <= 9; i++)
{
fun(s,i);
printf("%d ---- %s\n", i, s);
}
return 0;
}
页: [1]