【发布时间】:2019-12-24 07:23:45
【问题描述】:
我什至尝试使用 long int 代替 int,但编译器执行时间过长,并且仍然没有给出任何输出。
我正在使用 CS50 的 IDE。
这是导致问题的代码:
int sum_alt = 0;
int sum_rest = 0;
int total = 0;
for(int i = 1; i < count; i=+2)
{
int temp = number[i] * 2;
sum_alt = sum_alt + temp;
}
for(int i = 0; i <= count; i=+2)
{
int temp = number[i];
sum_rest = sum_rest + temp;
}
total = sum_rest + sum_alt;
如何解决这个问题?
这是完整的代码:
#include <stdio.h>
#include <cs50.h>
int main(void)
{
long long Cardnumber;
//Typos correction + User input
do
{
Cardnumber = get_long_long("Number: ");
}
while(Cardnumber < 0);
int count = 0;
long long counter = Cardnumber;
//To count the number of digits
while(counter != 0)
{
counter = counter / 10;
count++;
}
//Declaring an array for cardnumber
printf("%i", count);
int number[count];
if((count != 13) && (count != 15) && (count != 16))
{
printf("INVALID\n");
}
for(int access = 0; access < count; access++)
{
number[access] = Cardnumber % 10;
Cardnumber = Cardnumber / 10;
}
int originalnumber[count];
for(int i = 0; i < count; i++)
{
originalnumber[i] = number[i];
}
long long int sum_alt = 0;
long long int sum_rest = 0;
long long int total = 0;
for(int i = 1; i < count; i=+2)
{
int temp = number[i] * 2;
sum_alt = sum_alt + temp;
}
for(int i = 0; i < count; i=+2)
{
int temp = number[i];
sum_rest = sum_rest + temp;
}
total = sum_rest + sum_alt;
if(total % 10 == 0)
{
if(((count == 13) || (count == 16)))
{
if((originalnumber[12] == 4) || originalnumber[15] == 4)
{
printf("VISA\n");
}
else if(originalnumber[15]== 5)
{
if(originalnumber[14] == 1 || originalnumber[14]== 2 || originalnumber[14] == 3 || originalnumber[14] == 4 || originalnumber[14] == 5)
{
printf("MASTERCARD\n");
}
}
else
{
printf("INVALID\n");
}
}
else if (count == 15)
{
if(originalnumber[15] == 3)
{
if(originalnumber[15] == 4 || originalnumber[15] == 7)
{
printf("AMERICAN EXPRESS\n");
}
else
{
printf("INVALID\n");
}
}
else
{
printf("INVALID\n");
}
}
}
else
{
printf("INVALID\n");
}
}
PS。我不明白 CS50 的 IDE 为何要花这么多时间进行计算。
【问题讨论】:
-
您的代码不完整。你想达到什么目的?为什么
long int需要更长的时间来计算?计算持续时间不受count限制吗?你是否也增加了count的值? -
count在for(int i = 1; i < count; i=+2)中的值是多少?? -
数组
number[]有多少个元素?如果您有count元素,那么您在第二个循环中阅读的内容超出了结尾。i <= count是可疑的。 -
@chmike Count 是用户输入的信用卡号的位数。上面的代码给出了错误信息背后的背景。计数也是一个有限的数字。我不明白为什么要花这么长时间来计算输出?
-
您发布的代码不存在您描述的问题。见minimal reproducible example。