d632 - C and S ??
題目描述
題目要求模擬一個布林函數的運算,給定兩個 32 位元的數列 A 和 B,計算 S 數列和 C' 數列。然而,程式碼僅計算了 S 數列,並進行了加法運算,實際上模擬的是 A + B 的位元運算,並處理了進位。題目描述中的 S 和 C' 的定義並未在程式碼中實現。
解題思路
程式碼讀取兩個 32 位元的字串 A 和 B,然後將它們的對應位元相加。如果某一位的總和大於 1,則將進位加到前一位。最後,程式碼輸出結果數列。程式碼實際上模擬了二進位加法,但題目描述與程式碼的實際功能不符。程式碼的邏輯是將兩個輸入字串的每個字符的 ASCII 值相加,然後處理進位。
複雜度分析
- 時間複雜度: O(N),其中 N 是字串的長度 (32)。程式碼需要遍歷字串兩次,一次用於讀取輸入,一次用於計算和輸出結果。
- 空間複雜度: O(1)。程式碼使用固定大小的陣列來儲存輸入和輸出,空間使用不隨輸入大小變化。
程式碼
#include <stdio.h>
using namespace std;
char a[33],b[33];
int main(){
int k=1120;
while(k--){
for(int i=0;i<33;++i){
scanf("%c",&a[i]);
printf("%c",a[i]);
}
printf("\n");
for(int i=0;i<33;++i){
scanf("%c",&b[i]);
printf("%c",b[i]);
a[i]+=b[i];
a[i]-='0';
}
printf("\n---------------------------------\n");
for(int i=32;i>=0;--i){
if(a[i]>'1'){
a[i-1]++;
a[i]-=2;
}
}
for(int i=0;i<32;++i){
printf("%c",a[i]);
}
printf("\n****End of Data******************\n");
}
}