当前位置:首页 » 编程语言 » c语言循环节

c语言循环节

发布时间: 2023-05-13 21:39:20

A. 给个c语言代码我,是求素数p的倒数循环节长度达到p-1的数。

//以下是我编的 只需修改 Max 后面 的数值就可以

#include <stdio.h>
#include <memory.h>
#include <math.h>
#define Max 1000 // Max=1000,可以修改这个1000,就是你需要输入的数。
int main(void)
{
find_prime_number(); //找 Max 以内的素数p, 然后算倒数的循环节,最后判断是否为p-1
return 0;
}
int find_prime_number() //找 Max 以内的素数
{
int num,i,check;
num=2;
while(num<=Max){
i=2;
while(i<=sqrt(num)){
if(num%i==0) break;
i++;
}
if(i>=sqrt(num)) find_recurring_decimal(num);
num++;
}
}
int find_recurring_decimal(int b) // 对质数找循环小数
{
int tempa,tempb,t,count;
int a=1;
int used[Max];//b <= Max-1

memset(used, 0, sizeof(used));
tempa=a;
tempb=b;
a=a%b;//求可以得到小数的部分
//需要的是找到第一次有相同余数的出现
//a=0是结束标志,先将败差a置为重复察卖皮出现,然后每次a = a*10%b求出新得的余数,
//并检查该余数是否出现过,配物有则开始算具体的循环节,无则置为1,继续
//默认的余数可以到999.
count=0;
used[0] = 1;
do{
used[a] = 1;
a = a*10%b;
}while(used[a] != 1);

if(a != 0){
t = a;
do{
count++;
a = a*10%b;
}while (a != t);
}
if(tempb==(count+1)) printf("素数=%d, 倒数的循环节=%d,循环余数=%d\n",tempb,count,t);
return 0;
}

B. 用C语言怎么求循环小数的循环节

循环小数在具体实现里也有余禅限吧 = = 那么可以用一个数组a从十分位开始读取读到n-1位 假设n和第一个元素相同,那么开始再用一个数组b读取n和a第一个元素比较,如果比较了n-1个数都拍耐相同那就是了输出a数组,否则将b复制到a里然后继竖贺尘续读取直到又出现和a数组第一个元素相同的数 重复= = 个人感觉这个思路不是最简 欢迎大家提意见 代码自己实现会更好

C. 用C语言怎么求循环小数的循环节

1、判断循环的关键是在确定每位小数的时候,判断余数是否出现与之前的相同。

2、例程:

intrepetend(//求循环节的函数,返回值为循环长度,共3个参数
inta,//第一个参数为被除数
intb,//第二个参数为除数
char*Str)//第三个参数为用于存循环节每一位的数组指针
{intRem[255],//用于存余数的整型数组
Div1=a,//把被除数保存下来,因为后面可能会改变被除数的值
Div2=b;//把除数也保存下来,因为后面可能会改变除数的值
if(a==0orb==0)return0;//如果被除数或者除数为0,函数返回0值
if(Div1<0)Div1=Div1*-1;//正负并不影响求循环节,所以被除数和除数都取绝对值
if(Div2<0)Div2=Div2*-1;//正负并不影响求循环节,所以被除数和除数都取绝对值
for(;Div1*10<Div2;){Div1=Div1*10;}
/*如果被除数乘以10小于除数,就通过一个循环不断让被除数乘以10,直到被除数乘以10大于
或者等于被除数,这样可以清除掉小数点后面的0.000000这些多余的数据。*/
Rem[0]=Div1%Div2;//第一次保存余数
for(inti=0;;i++)//用一个死循环检索小数点后面的每一位
{Div1=Rem[i]*10;//每一次的被除数都为前一次余数乘以10
Str[i]=Div1/Div2;//得到第i位小数(0为第1位,1为第2位,以此类推)
Rem[i+1]=Div1%Div2;//保存余数
if(Rem[i+1]==0)//不管小数点后第几位,如果余数为0,说明能除尽,不会出现循环
{Str[0]=0;//循环节为0
return1;}//函数返回1,这是根据你题目中要求的,但我觉得应该设为0比较合理
for(intj=0;j<=i;j++)//再用一重循环比较之前所有的余数,确定循环节起始点
if(Rem[i+1]==Rem[j])
/*判断是否出现循环的关键是判断余数是否和之前的某一次相同。如果当前余数等于之前的某一
次余数,说明开始出现循环。循环点的起点为j,终点为i,循环长度为(i-j)+1位小数,当上述判断为真时,就可以结束函数*/
{for(intk=0;k<=(i-j);k++)Str[k]=Str[j+k];//整理循环节数组
return(i-j)+1;}//函数返回循环长度
}
}

D. 循环节(c语言编写,不是c++)

#include <stdio.h>

void getLoop(int n);

int main(int argc, char *argv[]) {
int n;
printf("Input a prime number:");
scanf("%d", &n);
getLoop(n);
return 0;
}

void getLoop(int n) {
int len = 0;
int i = 1;
printf("Loop:");
do {
int pad = 0;
while (i < n) {
i *= 10;
pad++;
}
if (i % n == 0)
{
printf("NOT LOOP!!!\n");
return;
}
len += pad;
for (int k = 1; k < pad; k++) {
printf("0");
}
printf("%d", i / n);
i = i % n;
} while (i != 1);
printf("\n");
printf("Len:%d\n", len);
}

E. 编写c语言程序中,使用for循环是如何从内嵌循环终止外循环

break语句就行吧,可以设一个标致量,在外层循环检验后执行continue

F. C语言小数的循环部分与非循环部分

这个我提供两种思路你看行吗 用一个数除以另升谈瞎外一个数 把商和余数吵空存放到一个结构侍老体里面 然后没除一次 你就比较与前面存储的数相比较 如果有循环相同的(商和余数都相同) 就证明是循环的 否则就是不循环 (注意: 如果除数小于被除数 就一直乘10 直到大于被除数 然后继续相除)

第二种 简单 但是不可靠 用双精度表示商 然后把它变成一个字符串 然后遍历(因为精度有限 不可靠)

G. 如何求一个分数化成小数后的循环节求算法,或者C++/C程序。

#include <stdio.h>
#include <memory.h>
int main(void)
{
int a, b, t;
int used[10000];//b < 10000
memset(used, 0, sizeof(used));
printf("输入分子,分母:");
scanf("%d%d", &a, &b);

a %= b;//求可以得到小数的部分

//能循环就是出现余数重复出现,则只需找到第一次重复出现的余数
//0是结束标志,先将a置为重复出现,然后每次a = a*10%b求出新得的余数,并检查该余数是否出现过,有则开始重复,无则置为1,继续
for(used[0] = 1, used[a] = 1, a = a*10%b; used[a] != 1 ; used[a] = 1, a = a*10%b)
{
;
}

if(a == 0)
{
printf("有限小数\n");
}
else
{
t = a;
printf("循环小数,循环节:");
do
{
printf("%d", a*10/b);
a = a*10%b;
} while (a != t);
printf("\n");
}
return 0;
}

H. c语言怎样找无限循环小数的循环体

//我研究了一下午,查了好多资料,终于搞圆敬定了

#include <stdio.h>
#include <memory.h>

#define MAX_LEN 1000

int nume; //numerator分子
int deno; //denominator分母
int quot[MAX_LEN]; //quotient商
int rem[MAX_LEN]; //remainder余数
int negative_flag; //段腔脊负数标志

void save_quot_rem() //存取商和余数
{
int i;
negative_flag = nume/(double)deno < 0 ? 1 : 0; //若是负数则标志为1
nume = nume < 0 ? -nume : nume; //若是负数则转换为正数,下同
deno = deno < 0 ? -deno : deno;
for(i=0; i<MAX_LEN; i++)
{
quot[i] = nume/deno;
rem[i] = nume%deno;
nume = 10*rem[i];
if(!rem[i])
break;
} //for
}

//判断是否是循环小数,若是则保存循环节起始和结束位置
int is_circu(int *start, int *end)
{
int i, j;
for(i=0; i<MAX_LEN; i++)
{
if(-1 == rem[i])
return 0;
}
for(i=0; i<MAX_LEN; i++)
{
for(j=i+1; j<MAX_LEN; j++)
{
if(rem[i] == rem[j])
{
*start = i;
*end = j;
return 1;
} //if
} //for
} //for
return 0;
}

void show_circu(int start, int end) //显示循环小数
{
int i;
printf(negative_flag ? "-%d." : "%d.", quot[0]); //整数部分
for(i=1; i<=start; i++) //小数非循环节部分
{
printf("%d", quot[i]);
}
printf("(");
for(i=start+1; i<=end; i++) //小数循环节部分
{
printf("%d", quot[i]);
}
printf(")\n\n");
}

void show_not_circu() //显示非循环小数
{
int i;
if(-1 == quot[1]) //无小数部分
{
printf(negative_flag ? "-%d" : "%d", quot[0]);
printf("\n\n");
return;
}
printf(negative_flag ? "-%d." : "%d.", quot[0]);
for(i=1; (i < MAX_LEN) && (-1 != quot[i]); i++) //小数部分
{
printf("%d", quot[i]);
}
printf("\n\n");
}

int main()
{
int start, end;
printf("请输入分子和分母,用空格分开(输入两个0离开):\n");
while(1)
{
fflush(stdin);
scanf("%d%d", &nume, &deno);
if(!nume && !deno)
return 0;
memset(quot, -1, sizeof(quot));
memset(rem, -1, sizeof(rem));
if(!deno)
{
printf("除数不握渗能为0,请重新输入:\n");
continue;
}
save_quot_rem();
is_circu(&start, &end) ? show_circu(start, end) : show_not_circu();
}
return 0;
}

//测试数据: 35416156 61616315
// 1 7

I. C语言中无限循环小数的问题

20/3得到整悉岩春形结果后在睁耐转化为枣高double所以结果是6.0000
d=20.0/3;
printf("%f",d);

J. 求能找出一个循环小数循环节的C语言编程,即使最后一段循环节不完整

一个能算1024位的版本
intres[1024];
chard[1024];
voidloop(intnum,intden){
intnum0=num;
if(den){
int轮档i=0;
num0铅桐竖=num%den;
while(num0<den){
num0*=10;
}
while(i<1024){
intj;
if(num0%den==0){
printf("noloop ");
break;
}
d[i]='0'+num0/den;
num0=num0%den;
res[i]=num0;
for(j=槐大0;j<i;j++){
if(res[i]==res[j]){
d[i]=0;
printf("%d/%dloopis%s ",num,den,&d[j]);
return;
}
}
num0*=10;
i++;
}
}
}
intmain()
{

loop(3,53);
return0;
}

热点内容
怎么创建boa服务器 发布:2025-07-18 06:52:09 浏览:696
大盘指标源码 发布:2025-07-18 06:51:33 浏览:921
python粘贴板 发布:2025-07-18 06:46:20 浏览:795
pro241会有什么配置 发布:2025-07-18 06:46:15 浏览:647
android下载实例 发布:2025-07-18 06:43:00 浏览:445
java完全数 发布:2025-07-18 06:40:46 浏览:275
微信投诉怎么上传图片 发布:2025-07-18 06:40:38 浏览:786
电脑版我的世界自救练习服务器 发布:2025-07-18 06:22:25 浏览:263
光遇之前为什么不在安卓上线 发布:2025-07-18 06:20:17 浏览:284
c语言偏移 发布:2025-07-18 06:03:01 浏览:889