checksum是扫描一个数据包并返回一个数值的一种算法。其思路在于,如果数据包被修改过,那么,checksum也会立即变化。所以,checksum常常用于侦查数据传输错误,证实文档内容的完整性和其他需要检查数据不被修改的场合。
在本题中,你将实现一个 checksum算法即 Quicksum。一个 Quicksum数据包仅允许包含大写字母和空格,它通常是由一个大写字母开始和结束。然而,空格和字母可以出现在其他的位置中,连续的空格也是允许的。
Quicksum是一行字符串(数据包)中每个字符的位置与该字符的值的乘积之和。空格的值是 0,字母的值等于它在字母表中的位置。所以,A的值是 1,B 的值是 2,依此类推,Z 的值是 26。下面两个例子是求“ACM”和“CHINA”的 Quicksum:
ACM: 1*1 + 2*3 + 3*13 = 46
CHINA: 1*3 + 2*8 + 3*9 + 4*14 + 5*1 = 107
Input
输入数据包含一个或多个数据包。每个数据包占一行,不能以空格开始或结束,包含 1~255 个字符。
Output
对于每个数据包,在每一行上输出计算它的 Quicksum的数学表达式。
Sample Input
A C M
Sample Output
A C M:1*1+2*0+3*3+4*0+5*13=75我的代码#include <iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
int main()
{
char s[]=" ABCDEFGHIJKLMNOPQRSTUVWXYZ", a[255];
int i,j,length;
long sum;
loop:
cin.getline(a,255);
length=strlen(a);
if(a[0]==' '||a[length-1]==' ') return 0;
cout<<a<<':';
for(sum=0,i=0;i<=length;i++)
{
for(j=0;j<=26;j++)
{
if(a[i]==s[j])
{ cout<<i+1<<'*'<<j;
sum+=(i+1)*j; break; }
}
if(i<length-1) cout<<'+';
}
cout<<'='<<sum<<endl; goto loop;
}