【问题标题】:Math operation trouble数学运算麻烦
【发布时间】:2012-10-19 15:35:44
【问题描述】:

对于某些人来说,这似乎是一个非常简单的解决方案,但我已经尝试了一段时间,但它一直困扰着我。

int sum = (p[i] - 'A') + (s2[i % keyLen] - 'A');
 char c = 'A' + sum%26;

我很难想出解决方案 数学从来都不是我的强项。如果p[i]=72 or 'H's2[i]=5,则char c 的值最后应该等于79。

此操作非常有效,但我试图了解发生了什么,因此我尝试使用普通计算器进行操作,并不断得出错误的答案。正确的操作顺序到底是什么?值应该是什么?

这是我目前所拥有的完整源代码:

#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char s2[25];
    strcpy(s2, argv[1]);
    int keyLen = strlen(s2);
    printf("Please enter a string of text to be encrypted!\n");
    string p = GetString();
    for (int i = 0, n = strlen(p); i < n; i++)
    {
        if (isupper(p[i])){
        int sum = (p[i] - 'A') + (s2[i % keyLen] - 'A');
        char c = 'A' + sum%26;
        printf("%c", c);
        }
    }
    printf("\n");
    printf("%d\n", keyLen);

}

我做这个操作的方式是:

int sum = (p[i] - 'A') + (s2[i % keyLen] - 'A');
//int sum = (72-65) + (72 % 5) - 65) sum= -56
char c = 'A' + sum%26;
//char c = 65 + -56 %26 char c = -8

我显然知道我的数学是错误的,但当我通过调试器 sum = 14char c = 79 or 'O' 运行操作时,我认为我做对了。

【问题讨论】:

  • 所以您是说您的代码运行良好,但您的计算器却无法运行?
  • 你能总结一下你想用这个计算做什么吗?
  • 我对这个问题的理解是代码工作正常,但是 OP 试图手动重新运行计算以了解它是如何工作的。

标签: c cs50 vigenere


【解决方案1】:
int sum = (p[i] - 'A') + (s2[i % keyLen] - 'A');
//int sum = (72-65) + (72 % 5) - 65) sum= -56

你的误会就在这里。

代码在做什么

(s2[i % keyLen] - 'A')

意思

(char_from_s2 - 'A')

其中char_from_s2 是索引i % keyLens2 中的字符,即位置i 处的字符环绕以适应字符串的长度。

您的计算结果

您的计算方式有所不同:

(char_from_p % keyLen) - 'A'

您从p 而不是s2 中获取字符,并将% 运算符应用于字符值而不是索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 2019-03-30
    • 2016-08-06
    相关资源
    最近更新 更多