ACM题出错了,不知道错误在哪里,
来源:学生作业帮 编辑:作业帮 分类:英语作业 时间:2024/08/28 04:09:33
ACM题出错了,不知道错误在哪里,
Consecutive Digits
Input: The
input file begins with a line containing a single integer specifying
the number of problem sets in the file.Each problem set is specified
by four base 10 numbers on a single line,n d b e,where n
and d are the numerator and denominator of the rational number
and 0 ≤ n ≤ 5,000 and 1 ≤ d ≤ 5,000.b and e are the beginning and ending
positions for the desired range of digits,with 0 ≤ b,e ≤ 250 and
0 ≤ (e-b) ≤ 20.Note that 0 is
the position immediately to the right of the decimal point.
Output: Each
problem set will be numbered (beginning at one) and will generate a
single line:
Problem set k:n / d,
base 7 digits b through e:result
where k is replaced by the problem set number,result is
your computed result,and the other values are the corresponding input
values.
Example input:
Example output:
4
1 5 0 0
6 49 1 3
33 4 2 7
![](http://img.wesiedu.com/upload/1/db/1db910bb36b304b04830cd57a042de1e.jpg)
511 977 122 126
Problem set 1:1
/ 5,base 7 digits 0 through 0:1
Problem set 2:6 / 49,base 7 digits 1 through 3:600
Problem set 3:33 / 4,base 7 digits 2 through 7:151515
Problem set 4:511 / 977,base 7 digits 122 through 126:12425
我的代码:
#include<iostream>
#include<string.h>
#include<memory.h>
using namespace std;
int main()
{
int casenum,b,e,i,j,k,temp_z,ww,a[300]={0},size;
float n,d,temp_x;
cin>>casenum;
for(i=1;i<=casenum;i++)
{
cin>>n>>d>>b>>e;
temp_z=int(n/d);
temp_x=n/d;
temp_x=float(temp_x-temp_z);
for(j=0;j<300;j++)
{
temp_x=temp_x*7;
ww=int(temp_x);
a[j]=ww;
//cout<<a[j]<<" ";
temp_x=temp_x-ww;
if(temp_x==0)
break;
}
cout<<"Problem set "<<i<<":"<<n<<" / "<<d<<",base 7 digits "<<b<<" through "<<e<<":";
for(k=b;k<=e;k++)
cout<<a[k];
cout<<endl;
memset(a,0,sizeof(int)*300);
}
system("pause");
return 0;
}
![](http://img.wesiedu.com/upload/e/23/e23b7cbf5b65893bc8d78ad2c93fadee.jpg)
额,这是我的运行结果,正确的应该是Problem set 4:511 / 977,base 7 digits 122 through 126:12425
Consecutive Digits
Input: The
input file begins with a line containing a single integer specifying
the number of problem sets in the file.Each problem set is specified
by four base 10 numbers on a single line,n d b e,where n
and d are the numerator and denominator of the rational number
and 0 ≤ n ≤ 5,000 and 1 ≤ d ≤ 5,000.b and e are the beginning and ending
positions for the desired range of digits,with 0 ≤ b,e ≤ 250 and
0 ≤ (e-b) ≤ 20.Note that 0 is
the position immediately to the right of the decimal point.
Output: Each
problem set will be numbered (beginning at one) and will generate a
single line:
Problem set k:n / d,
base 7 digits b through e:result
where k is replaced by the problem set number,result is
your computed result,and the other values are the corresponding input
values.
Example input:
Example output:
4
1 5 0 0
6 49 1 3
33 4 2 7
![](http://img.wesiedu.com/upload/1/db/1db910bb36b304b04830cd57a042de1e.jpg)
511 977 122 126
Problem set 1:1
/ 5,base 7 digits 0 through 0:1
Problem set 2:6 / 49,base 7 digits 1 through 3:600
Problem set 3:33 / 4,base 7 digits 2 through 7:151515
Problem set 4:511 / 977,base 7 digits 122 through 126:12425
我的代码:
#include<iostream>
#include<string.h>
#include<memory.h>
using namespace std;
int main()
{
int casenum,b,e,i,j,k,temp_z,ww,a[300]={0},size;
float n,d,temp_x;
cin>>casenum;
for(i=1;i<=casenum;i++)
{
cin>>n>>d>>b>>e;
temp_z=int(n/d);
temp_x=n/d;
temp_x=float(temp_x-temp_z);
for(j=0;j<300;j++)
{
temp_x=temp_x*7;
ww=int(temp_x);
a[j]=ww;
//cout<<a[j]<<" ";
temp_x=temp_x-ww;
if(temp_x==0)
break;
}
cout<<"Problem set "<<i<<":"<<n<<" / "<<d<<",base 7 digits "<<b<<" through "<<e<<":";
for(k=b;k<=e;k++)
cout<<a[k];
cout<<endl;
memset(a,0,sizeof(int)*300);
}
system("pause");
return 0;
}
![](http://img.wesiedu.com/upload/e/23/e23b7cbf5b65893bc8d78ad2c93fadee.jpg)
额,这是我的运行结果,正确的应该是Problem set 4:511 / 977,base 7 digits 122 through 126:12425
十进制小数转七进制. 小数部分,确定是乘以7然后再取整数部分.
但是这个方法前提是这个小数是有限小数.虽然对于一些无限小数,可以得到正确解,但是随着所求位置越大,你的误差也越大.
而且你这里用了float类型,这里也有一个精度损失.
这道题也不是很难.
对于 d/n 先拿掉他的整数部分. 变成d
d0/n ==> d0*7/n 这里取整数,也去掉整数成d1/n . 这里就是第0位.
d1/n ==> d1*7/n .除整数,成d2/n .这里就是第1位.
.
这样精度就不会丢失. 方法跟你类似.但是保持分母不变. 每次除整,保证精度不损失 .
还有一点,可以不用那个数组. 用个循环.
for(i=0;i
但是这个方法前提是这个小数是有限小数.虽然对于一些无限小数,可以得到正确解,但是随着所求位置越大,你的误差也越大.
而且你这里用了float类型,这里也有一个精度损失.
这道题也不是很难.
对于 d/n 先拿掉他的整数部分. 变成d
d0/n ==> d0*7/n 这里取整数,也去掉整数成d1/n . 这里就是第0位.
d1/n ==> d1*7/n .除整数,成d2/n .这里就是第1位.
.
这样精度就不会丢失. 方法跟你类似.但是保持分母不变. 每次除整,保证精度不损失 .
还有一点,可以不用那个数组. 用个循环.
for(i=0;i
matlab程序出现了错误,不知道哪里出错了
三角函数求周期.我不知道哪里出错了,急,求指出错误及思考方向
matlab程序,不知道哪里出错了,显示为
C语言一道题目.不知道哪里出错了,
hdu acm 第1592题哪里错了?代码如下,错误是 runtime error
matlab程序如下,不知道哪里出错了,说矩阵维数不符合
小弟刚学习matlab,编了个程序,但是不知道为什么错误在哪里,
最近写了一篇英语作文 知道有很多错误的地方但是不知道错在哪里
如何建立中序线索二叉树,我调了很长时间了,可是不知道哪里出错了,
杭电acm的一道题,不知道自己错在哪,求助
在matlab中进行非线性拟合,不知道那出错了,
编译发现错误 我想知道错在哪里了