大意:判断一个256进制数增加2个字节(16位)是否可以被32493整除。说实话,真难看懂题意。
CODE:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <ctype.h>
using namespace std;
#define MAXN 1050
char str[MAXN];
int main()
{
char save[ 8];
long long res = 0, ans = 0;
while(gets(str))
{
if(str[ 0] == ' # ') break;
int len = strlen(str);
ans = res = 0;
for( int i = 0; i < len; i++)
{
ans = (ans* 256 + str[i]) % 34943;
}
ans = (ans<< 16) % 34943;
res = ans? 34943-ans: 0;
sprintf(save, " %04x ", ( int)res); // 转换为16进制数,如果不足4位补齐。
for( int i = 0; i < 4; i++)
{
if(isalpha(save[i]))
{
save[i] = toupper(save[i]);
}
}
printf( " %c%c %c%c\n ", save[ 0], save[ 1], save[ 2], save[ 3]);
}
return 0;
}
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <ctype.h>
using namespace std;
#define MAXN 1050
char str[MAXN];
int main()
{
char save[ 8];
long long res = 0, ans = 0;
while(gets(str))
{
if(str[ 0] == ' # ') break;
int len = strlen(str);
ans = res = 0;
for( int i = 0; i < len; i++)
{
ans = (ans* 256 + str[i]) % 34943;
}
ans = (ans<< 16) % 34943;
res = ans? 34943-ans: 0;
sprintf(save, " %04x ", ( int)res); // 转换为16进制数,如果不足4位补齐。
for( int i = 0; i < 4; i++)
{
if(isalpha(save[i]))
{
save[i] = toupper(save[i]);
}
}
printf( " %c%c %c%c\n ", save[ 0], save[ 1], save[ 2], save[ 3]);
}
return 0;
}