对于n=2,3,4,。。。,50,输出1/n的十进制表示的字符列。要求每当十进制小数的第一个循环周期输出后,就结束该数的输出。以下是程序部分输出结果的样板:
1/2=0.50
1/3=0.3
1/4=0.250
1/5=0.20
1/6=0.16
1/7=0.142857
大家帮帮忙哈!
----------------解决方案--------------------------------------------------------
#include "stdio.h"
main()
{
float k,i=1.0;
int j;
for(j=2;j<=50;j++)
{
k=i/j;
printf ("%10f",k);}
}
----------------解决方案--------------------------------------------------------
要求输出小数的一个循环后就停止输出阿
----------------解决方案--------------------------------------------------------
就2-50啊,你把这些数的循环节长度算出来.保存到数组中就行了啊
----------------解决方案--------------------------------------------------------
#include <stdio.h>
void main()
{
int n,i,j,k;
float x;
int a[100];
printf("enter n\n");
scanf("%d",&n);
for(i=2;i<=n;i++){
x=1/((float)i);
for(j=0;;j++){
x=x*10;
a[j]=(int)x;
for(k=0;k<j;k++)
if(a[k]==a[j]) break;
break;
}
for(i=0;i<k;i++)
x=x+(float)a[i]/10;
printf("%f\n",x);
}
}
大家看看这个程序哪里有错
----------------解决方案--------------------------------------------------------
不是错在哪里,是根本就不对
----------------解决方案--------------------------------------------------------
写程序没步不要那么复杂!! 尽量给读者有容易读懂的感觉
----------------解决方案--------------------------------------------------------
闲着无聊,写个玩玩,花了我一小时
#include <stdio.h>
int gcd(int m,int n)
{
int t;
if(m>n)
{
t=m;
m=n;
n=t;
}
while(n%m!=0)
{
t=n;
n=m;
m=t%m;
}
return m;
}
void len(int de,int *len1,int *len2)
{
int r=0;
*len1=0;
*len2=0;
while(de%10==0)
{
de=de/10;
(*len1)++;
}
while(de%2==0)
{
de=de/2;
(*len1)++;
}
while(de%5==0)
{
de=de/5;
(*len1)++;
}
if(de!=1)
{
while((r*10+9)%de!=0)
{
(*len2)++;
r=(r*10+9)%de;
}
(*len2)++;
}
}
void f(int num,int denom,char *result)
{
int t,x,i,index=0;
int length1,length2;
char temp[20];
t=gcd(num,denom);
num=num/t;
denom=denom/t;
x=(int)num/denom;
num-=x*denom;
if(x)
{
while(x!=0)
{
temp[index++]=x%10+'0';
x=x/10;
}
for(i=0;i<index;i++)
result[index-1-i]=temp[i];
}
else
result[index++]='0';
result[index++]='.';
len(denom,&length1,&length2);
for(i=0;i<length1;i++)
{
result[index++]=((int)(num*10/denom))+'0';
num=num*10%denom;
}
if(length2)
{
result[index++]='(';
for(i=0;i<length2;i++)
{
result[index++]=((int)(num*10/denom))+'0';
num=num*10%denom;
}
result[index++]=')';
}
result[index]='\0';
}
int main()
{
int i;
char s[1100];
for(i=2;i<=50;i++)
{
f(1,i,s);
printf("1/%d=",i);
printf("%s\n",s);
}
for(i=980;i<=982;i++)
{
f(1,i,s);
printf("1/%d=",i);
printf("%s\n",s);
}
return 0;
}
----------------解决方案--------------------------------------------------------
注意循环节放在刮号里,容易区别
----------------解决方案--------------------------------------------------------
to:我不是郭靖,加括号搞什么,不加也可以。
----------------解决方案--------------------------------------------------------