我已经在很长一段时间内倾注了我的代码(不起作用)。这是一个项目欧拉问题,其中给一个非常大的要求,然后要求打印所述总和的前十个数字。 (问题可以在这里找到:https://projecteuler.net/problem=13)
我已经进行了几次测试'我在其中添加打印命令以查看代码中各个点的各种值。当我运行代码时,我得到了从符号到十位数字的任何内容,应该是单个数字。
反正。我的问题是:这是一个类型转换问题,还是我的方法中还有一些其他明显的问题我不知道?我一直在研究尝试寻找修复的类型转换,但无济于事。
感谢您的帮助!
代码如下:
// this is a program to find a very large sum of many very large numbers
#include <stdio.h>
#include <math.h>
int main()
{
//declare all ints needed
int i;
int j;
int d; // digit, need to add 48
int placesum; // sum of addition in _'s place (1's, 10's, 10000's)
int place; // final place value
int c = 0, tens = 1, otherc; // counters for start finder
int a = 0; // another counter
//declare all arrays
char numarray[101][51]; //array of strings containing all 100 numbers
char sum[100];
printf("please save data to largesumdata.txt\n\n press enter when ready");
getchar();
// THE PROBLEM- I don't know how to get my data into my program // FIXED
// using fscanf()
FILE *pf; // declare a pointer to the file
pf = fopen("largesumdata.txt", "r"); // trys to open file // "r" means read only
if(pf == NULL)
printf("Unable to open file, sorry Jar\n");
else
{
for(j = 0; j < 100; j++)
fscanf(pf, "%s\n", &numarray[j]); // fscanf(pointer, data type, location)
}
//TESTING
//printf("You have reached point A\n");//POINT A WAS REACHED
//TESTING
//TESTING
//printf("Check1, %c\n", numarray[45][23]);
//TESTING
//TESTING
//printf("%c\n", numarray[90][22]);//Can successfully call characters from array
//TESTING
// (Brute force attempt) //I NEVER MESS WITH numarray WHY IS IT CHANGING
for(i = 49; i >= 0; i--)
{
//printf("%d\n", d);
for(j = 0; j < 100; j++)
{
d = (int)numarray[j][i] - 'o';
//printf("%d\n", d);
//holdup// d -= 48; // ASCII conversion // could also write "d = d-48"
//printf("%d\n", d);
placesum += d; // could also write "placesum = placesum + d"
//printf("%d\n", placesum);
}
place = placesum % 10;
placesum = placesum / 10; // takes "10's place" digit for next column
// now need to put 'int place' into 'char sum'
sum[i+5] = (char)place+'0'; // ASCII conversion // "+5" for extra space //HERE not properly stored in sum
}
//TESTING
//printf("Check2, %c\n", numarray[45][23]);
//TESTING
//TESTING
//printf("You have reached point B\n");//POINT B WAS REACHED
//TESTING
// find out where sum starts
for(c=0; c<10; c++)
if(sum[c] != '0')
break;
//TESTING
//printf("You have reached point C\n"); //POINT C WAS REACHED
//TESTING
otherc = 4-c;
printf("The first 10 digits of the sum of all those f***ing numbers is....\n");
printf("%d-%d-%d-%d-%d-%d-%d-%d-%d-%d", sum[otherc, otherc+1, otherc+2, otherc+3, otherc+4, otherc+5, otherc+6, otherc+7, otherc+8, otherc+9]);
//%c-%c-%c-%c-%c-%c-%c-%c-%c-%c //copy and paste purposes
//%d-%d-%d-%d-%d-%d-%d-%d-%d-%d // ^^^^^
getchar();
return 0;
}
P.S。如果我的过多笔记令人困惑,我道歉
答案 0 :(得分:1)
您使用错误的表单在C中打印数组。
sum[otherc, otherc+1, otherc+2, otherc+3, otherc+4, otherc+5, otherc+6, otherc+7, otherc+8, otherc+9]
- &gt;这实际上会衰减到sum[otherc+9]
,因为C会将,
视为运算符。
要在每个数组索引处打印值,您应该像这样使用它:sum[otherc], sum[otherc+1], sum[otherc+2],..
要详细了解C&#39 ,
(逗号)运算符,您可以begin here
在我上面解释的printf
中,第一个格式说明符%d
获得sum[otherc + 9]
,因为sum[otherc,...,otherc+9]
实际上是一个数字,而otherc + 9
数组sum
的索引。你没有为其他格式说明符提供任何打印,因此你会得到垃圾。
答案 1 :(得分:0)
过了一会儿,我重新访问了我的代码,并意识到我正在处理超过1000万的数字。我声明了int
,long int
和long long int
个变量。
我重新分析了哪个是哪个,并确保所有变量都能处理所需的数据(查看this方便链接后,显示不同数据类型的最大整数大小。
在我使用错误的值之前,超过最大值返回的值不正确,导致程序在运行时崩溃。
这里的课程:检查您的数据类型!