【发布时间】:2020-05-27 11:46:29
【问题描述】:
我正在尝试为 CS50(信用)中设置的信用问题编写代码,我才刚开始,但我遇到了一个问题。现在我正在尝试提取卡位以便稍后使用它们并检查提取是否顺利。代码似乎对卡号中的每个数字都有效,除了第 12 位(从末尾开始)。
例如 卡号: 输入:1111111111111111 输出:1111111111101111
虽然在某些情况下不会出现此问题:
输入: 1234567890123456 输出: 1234567890123456
这是我的代码(请不要太苛刻,我是新手:)) 我知道还有其他方法可以获得这些数字,但我现在真的很想知道为什么它不起作用。提前致谢!
#include <stdio.h>
#include <cs50.h>
long card_no(void);
int main(void)
{
long card = card_no();
int one = (card % 10);
int two = (card % 100 - card % 10) * 0.1;
int tree = (card % 1000 - card % 100) * 0.01;
int four = (card % 10000 - card % 1000) * 0.001;
int five = (card % 100000 - card % 10000) * 0.0001;
int six = (card % 1000000 - card % 100000) * 0.00001;
int seven = (card % 10000000 - card % 1000000) * 0.000001;
int eight = (card % 100000000 - card % 10000000) * 0.0000001;
int nine = (card % 1000000000 - card % 100000000) * 0.00000001;
int ten = (card % 10000000000 - card % 1000000000) * 0.000000001;
int eleven = (card % 100000000000 - card % 10000000000) * 0.0000000001;
int twelve = (card % 1000000000000 - card % 100000000000) * 0.00000000001;
int thirteen = (card % 10000000000000 - card % 1000000000000) * 0.000000000001;
int forteen = (card % 100000000000000 - card % 10000000000000) * 0.0000000000001;
int fifteen = (card % 1000000000000000 - card % 100000000000000) * 0.00000000000001;
int sixteen = (card % 10000000000000000 - card % 1000000000000000) * 0.000000000000001;
printf("%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i\n", sixteen, fifteen, forteen, thirteen, twelve, eleven, ten, nine, eight, seven, six, five, four, tree, two, one);
}
//Prompt user for 13 to 16 digits card number
long card_no(void)
{
long n;
do
{
n = get_long("Card number:\n");
}
while (n < 1000000000000 || n > 9999999999999999);
return n;
}
【问题讨论】:
-
卡号可能放不下。为什么不作为字符串处理,分别获取每个数字?
-
或者当您与浮点数相乘时可能会出现不精确。为什么不使用整数除法,
/? -
程序到底应该做什么?无论如何,它看起来很奇怪。