首页 > 解决方案 > 如何处理整数中的小数?CS50 卢恩算法

问题描述

我想添加一个数组的所有数字并从中获取总和。我正在努力解决的问题是我必须将我从输入中得到的数字乘以这使得一个数组有可能在一个数组中有两位数。一个示例数字是 8346761。挑战要求我取每隔一个数字 (6,6,3),然后将它们相乘 (12,12,6) 并将第一个数字加在一起,如 (1+2+1+2+ 6)=12。我只知道如何做 12+12+6=30 并且在这个特定部分寻求帮助。我是编程新手,而且堆栈溢出,所以如果我做错了什么,请告诉我,以便我可以解决它。谢谢

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    long long cardNum = get_long_long("What is your credit card number?\n");


    printf("Number: %lld\n", cardNum);
    long long cardNumz = cardNum; 


    long long Multnumbers[20];
    cardNum /= 10;
    for (long long i=0; i < 20; i++) 
    {

        Multnumbers[i] = cardNum % 10;
        Multnumbers[i] *= 2;
        cardNum /= 100;

    }
    int sum = 0;

    int loop;
    for(loop = 0; loop < 20; loop++)
    {

      printf("%lld ", Multnumbers[loop]);

    }
     printf("\n");

    long long number=Multnumbers[0];
    for (long long rz=1;rz<11;rz++)
    {
        number = number*10+Multnumbers[rz];
    }
    printf("Big multiple number is %lld\n ", number);


 long long Nonmultnumbers[20];

    for (long long i=0; i < 20; i++) 
    {

        Nonmultnumbers[i] = cardNumz % 10;
        cardNumz /= 100;

    }
    int loopn;
    for(loopn = 0; loopn < 20; loopn++)

      printf("Non multnumbers%lld ", Nonmultnumbers[loopn]);
    printf("\n");

标签: ccs50luhn

解决方案


如果我理解正确,您想在两位数(12)中取数字(1 和 2)来计算总和。最简单的方法可能是将这些数字除以 10 来计算第一位。并使用余数运算符计算第二位数。

第一个数字的计算。(只要数字是整数,这个除法就不会给出 1.2)。

int n = 12 / 10 // n will be 1 (1st digit).

第二位数的计算。使用余数运算符,%.

int rem = 12 % 10 // rem will be 2 (2nd digit).

推荐阅读