gpt4 book ai didi

c - 数学运算麻烦

转载 作者:太空宇宙 更新时间:2023-11-04 07:31:59 26 4
gpt4 key购买 nike

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

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

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

此操作非常有效,但我试图了解发生了什么,所以我尝试使用普通计算器来计算,但一直得出错误的答案。正确的操作顺序究竟是什么?值应该是什么?

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

#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'就像它应该的那样。

最佳答案

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_s2s2中索引i % keyLen的字符,即位置i的字符缠绕以适应字符串的长度。

您的计算结果

您的计算正在做一些不同的事情:

(char_from_p % keyLen) - 'A'

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

关于c - 数学运算麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12977680/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com