对某些人来说,这似乎是一个非常简单的解决方案,但我一直试图弄清楚它有一段时间了,它困扰着我。
int sum = (p[i] - 'A') + (s2[i % keyLen] - 'A');
char c = 'A' + sum%26;
我很难想出解决方案数学从来都不是我的强项。如果和的值char c
最后应该等于 79 。p[i]=72 or 'H'
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 = 14
并且char c = 79 or 'O'
应该这样做。