以下是一个C语言程序,用于判断给定的数是否是循环数:
#include <stdio.h>
#include <string.h>
int is_cyclic(char *num) {
int len = strlen(num);
long long n = atoll(num); // 将数字串转换为整数
char product[120]; // 存放乘积的字符串
for (int i = 1; i <= len; i++) {
sprintf(product, "%lld", n * i); // 计算乘积并转换为字符串
if (strlen(product) != len) { // 乘积的位数不等于原数字的位数,不是循环数
return 0;
}
char rotated[120]; // 存放循环移位后的字符串
strncpy(rotated, product, len); // 复制乘积的前len位到rotated中
strcat(rotated, product + len); // 将乘积的后几位接到rotated的后面
if (strcmp(num, rotated) == 0) { // 如果原数字串和循环移位后的字符串相等,是循环数
return 1;
}
}
return 0;
}
int main() {
char num[61]; // 输入的数字串,长度为2到60位之间
scanf("%s", num);
int result = is_cyclic(num);
printf("%d\n", result);
return 0;
}
该程序首先定义了一个is_cyclic
函数,用于判断给定的数字串是否是循环数。该函数接受一个指向数字串的指针作为参数,并返回一个整数,表示该数字串是否是循环数。函数内部使用一个循环来计算数字串与1到n之间的整数的乘积,并将乘积转换为字符串。然后,函数将乘积循环移位,得到一个新的字符串,并将其与原始数字串进行比较。如果两个字符串相等,则该数字串是循环数,函数返回1。否则,函数返回0。最后,程序从标准输入中读取一个数字串,调用is_cyclic
函数判断它是否是循环数,并输出结果。
【本题由文心一言4.0提供解答·内容仅供参考】