C 在运行某些计算时写入txt文件
我试图创建一个程序,在一个txt文件输出的结果。然而,当我尝试使用大数字(如1000000)时,它不能正常工作,并且总是在113383处停止 代码如下:C 在运行某些计算时写入txt文件,c,windows,loops,collatz,C,Windows,Loops,Collatz,我试图创建一个程序,在一个txt文件输出的结果。然而,当我尝试使用大数字(如1000000)时,它不能正常工作,并且总是在113383处停止 代码如下: int n, count, number, mayor, masvueltas, top; char c = '@'; freopen("output MILLION.txt", "w", stdout); count = 0; number = 1; mayor = 0; masvueltas = 0; while(number != 100
int n, count, number, mayor, masvueltas, top;
char c = '@';
freopen("output MILLION.txt", "w", stdout);
count = 0;
number = 1;
mayor = 0;
masvueltas = 0;
while(number != 1000000) {
printf("\n%d did ", number);//this will say that number did COUNT loops
n = number;
while (n != 1) {
if (n % 2 == 0) {
n = n / 2;
count++;
}
else {
n = 3 * n + 1;
count++;
}
}
printf(" %d saltos.\n", count);//Here continoues the sentence
char graf[count];//creates an array to print the @ character COUNT times
for (int i = 0; i < count; i++) {
graf[i] = c;
printf("%c", graf[i]);
}
if(masvueltas < count) {
masvueltas = count;
mayor = number;
}
number++;
count = 0;
}
int n,count,number,mayor,masvueltas,top;
字符c='@';
freopen(“output MILLION.txt”,“w”,stdout);
计数=0;
数字=1;
市长=0;
masvueltas=0;
而(数量!=1000000){
printf(“\n%d,did”,number);//这将说明number没有对循环计数
n=数量;
而(n!=1){
如果(n%2==0){
n=n/2;
计数++;
}
否则{
n=3*n+1;
计数++;
}
}
printf(“%d saltos.\n”,count);//这里继续这个句子
char-graf[count];//创建一个数组来打印@character count次
for(int i=0;i
另外,如果您知道如何在txt文件中打印ASCII字符219,block,那就太好了。这并不重要,因为我有一个更干净的txt文件。这是因为对于
number
=113383,在119次计数后,计算值达到827370449,下一次计数的最大值为2482111348,大于,这使得n
的值变为负值,-1812855948,循环没有达到1。您应该使用long n
来获得所需的结果。我还建议您使用for
循环,而不是while
循环。graf的目的是什么?在符号处打印count
不需要数组,只需putchar('@')
或printf(“@”)
循环即可。您是否尝试过为候选者使用更大的数据类型,例如long-long-int
?从大约1000000开始,它不必走路径n=(3*n)+1代码>连续多次打破存储范围。哦,是的。你说得对,风向标。与长整型工程。有没有一种方法可以修改它的大小,或者默认情况下它是有限的?。。。事实上,1001063
确实在149次迭代后打破了int
限制。您可以通过与安全的最大值进行比较来测试它是否会在执行n*3+1
之前打破数据类型。例如,使用int
时,最大安全值为(int\u MAX-1)/3
。