|
15鱼币
本帖最后由 须弥芥子 于 2022-9-10 00:00 编辑
为什么单独512出问题?  - /*************************************************************************
- > File Name: 1plus.c
- > Author: Yanjl
- > Mail: miku.cy@foxmail.com
- > Created Time: 2022/9/9 22:51:57
- ************************************************************************/
- #include<stdio.h>
- #define MAX 1024
- int main(){
- int num, sum, count;
- int numList[MAX][3];
- //当数字个数>3时用冒号省略
- _Bool shengLue[MAX];
- int lifNum[MAX];
- _Bool fuHe = 1;
- //j用于写入输出数字
- int j = 0;
- //k是数字位次
- int k = 0;
- count = 3;
- sum = 0;
- printf("请输入一个整数:");
- scanf("%d",&num);
- for(int z = 3; z <= num; z++){
- lifNum[k] = z * z * z;
- for(int i = 1; ; i += 2){
- sum += i;
- if(j <= 2){
- numList[k][j] = i;
- shengLue[k] = 0;
- j++;
- }else{
- numList[k][2] = i;
- shengLue[k] = 1;
- }
- if(sum == lifNum[k]){
- k++;
- break;
- }
- if(sum > lifNum[k]){
- j = 0;
- i = (count += 2);
- sum = 0;
- shengLue[k] = 0;
- }if(count > lifNum[k]){
- fuHe = 0;
- break;
- }
- }
- }
- if(fuHe){
- printf("经验证,3 - %d 之间所有的整数均符合尼科彻斯定理!\n",num);
- printf("\n是否打印所有式子(1/0):");
- int userChoice;
- scanf("%d",&userChoice);
- if(userChoice == 1){
- for(int p = 0; p < k; p++){
- if(shengLue[p]){
- printf("%d = %d + %d ... + %d\n", lifNum[p], numList[p][0], numList[p][1], numList[p][2]);
- }else{
- printf("%d = %d + %d + %d\n", lifNum[p], numList[p][0], numList[p][1], numList[p][2]);
- }
- }
- }
- }
- return 0;
- }
复制代码
本帖最后由 桃花飞舞 于 2022-9-10 10:18 编辑
他这个代码写的太差,变量用的太多,思路不显而易见,第二用他这种方法来做这个定理验证也不是简单的题, 如果在判断一个数之后 - if(sum == lifNum[k]){
- k++;
- break;
- }
复制代码把sum清零 - if(sum == lifNum[k]){
- k++;
- sum = 0;
- break;
- }
复制代码,可以避免512的时的问题,但是判断别的数字时候又出现了lifNum[k], numList[k][0], numList[k][1], numList[k][2]变量更新不到正确值得情况,我猜测别的数字也会出现512的现象,只是看不到
|
-
-
最佳答案
查看完整内容
他这个代码写的太差,变量用的太多,思路不显而易见,第二用他这种方法来做这个定理验证也不是简单的题, 如果在判断一个数之后把sum清零,可以避免512的时的问题,但是判断别的数字时候又出现了lifNum[k], numList[k][0], numList[k][1], numList[k][2]变量更新不到正确值得情况,我猜测别的数字也会出现512的现象,只是看不到
|