這對於一些人來說可能看起來像一個非常簡單的解決方案,但我一直試圖弄清楚它現在的一段時間,它讓我煩惱。數學運算問題
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正試圖手動重新運行計算,以瞭解它是如何工作的。 –