Problem Description
Now give you two integers n m, you just tell me the m-th number after radix point in 1/n,for example n=4,the first numble after point is 2,the second is 5,and all 0 followed
Input
Each line of input will contain a pair of integers for n and m(1 <=n <=10^7,1 <=m <=10^5)
Output
For each line of input, your program should print a numble on a line,according to the above rules
Sample Input
4 2
5 7
123 123
Sample Output
5
0
8
这个题是网友问我的题,当时我写的程序是这样的
void main()
{
double n,m,i=1;
cin>>m>>n;
double q=1/m;
for(;n>0;n--)
i=i*10;
q=q*i;
long p=90,q1=(int)q,i1=(int)i;
while(p>10)//求个位数
{
p=q1%10;
q1=q1/10;
}
cout<<p<<endl;
}
可是发现了问题:用123检测时,越界了,于是成了负值。
于是我就发了帖子,大家给了我很多帮助。
C1053710211 给出了思路:这个题不能这样做,应该模拟除法的过程,不停的将余数*10,把商的每位求出来,直到求出第m位,循环结束。
星羽哥哥又给出了代码:
#include "iostream"
using namespace std;
int main() {
int n;
int m;
int r;
int t = 1;
int d = 10;
cin>>n>>m;
for (int i = 1; i <= m; ++i) {
if (t == 0) {
r = 0;
break;
}
if ((r = (d * t / n)) == 0) {
d *= 10;
} else {
t = (d * t) % n;
d = 10;
}
}
cout<<r<<endl;
return 0;
}
---------
测试
31 10
5
请按任意键继续. . .
可是我在暑假总结时发现星羽的的代码的可读性很差,所以自己有写了个代码:
int main()
{
int dividend,
digit;
int temp=10;
cin>>dividend>>digit;
while(digit!=1)
{
temp=temp%dividend;
temp*=10;
--digit;
}
cout<<temp/dividend;
return 0;
}
我想比星羽的简单多了吧