这对于一些人来说可能看起来像一个非常简单的解决方案,但我一直试图弄清楚它现在的一段时间,它让我烦恼。数学运算问题
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 = 14
和char c = 79 or 'O'
运行该操作应该像它应该。
所以你说你的代码工作完美,但你不能让你的计算器工作? –
你能总结一下你计划做什么? – John
我对这个问题的理解是,代码工作正常,但OP正试图手动重新运行计算,以了解它是如何工作的。 –