这题加深了对指针的运用吧。没什么难的地方,就是一开始没看清题目,快速幂写挫了。真是不应该。看来基础不够扎实。
/*
题目:p2884 字符等式
*/
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cctype>
#include<string>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
#define FOR(i,m,n) for( int i = m; i < n;++i)
const int MX = 100;
char epre[MX];
long long QuckPow(int a, int b)
{
long long res = 1;
while (b)
{
if (b & 1)
{
res = res * a;
}
a = a*a;
b >>= 1;
}
return res;
}
int main()
{
gets(epre);
int len = strlen(epre) ;
int id = strchr(epre, '=')-epre;
long long ans, num;
sscanf(epre, "%lld", &num);
sscanf(epre + id + 1, "%lld", &ans);
//cout << num << endl << ans << endl;
if (num == ans)
puts("Impossible!");
else
{
int idex = 0;
bool flag = false;
long long mi = QuckPow(10, id -1);
for (int i = 0; i < id-1; ++i)
{
int num1 = num / mi;
int num2 = num % mi;
//cout << num1 << endl << num << endl;
if (num1 + num2 == ans)
{
idex = i+1;
flag = true; break;
}
mi /= 10;
}
if (flag)
{
for (int i = 0; i < idex; ++i)
putchar(epre[i]);
putchar('+');
cout << epre + idex ;
}
else puts("Impossible!");
}
return 0;
}
这题像是上面那一个的简单版。二进制注意一下翻转就好了。
/*
作者:
题目:p1740 进制计算器
*/
#include<iostream>
#include<cstdio>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
string str;
#define FOR(i,m,n) for( int i = m;i<n;++i )
int QuickPow(int a, int b)
{
int res = 1;
while (b)
{
if (b & 1)
{
res = (res * a) ;
}
a = (a*a) ;
b >>= 1;
}
return res;
}
int main()
{
// int 范围 2^31-1
int n;
cin >> n;
long long sum = 0;
while (n--)
{
cin >> str;
int len = str.length();
int tmp = 0,tmpans =0;
reverse(str.begin(), str.end());
FOR(i, 0, len)
{
tmp = str[i] - '0';
if (tmp != 0)
{
tmpans += ( tmp*QuickPow(2, i) );
}
}
sum += tmpans;
}
cout << sum << endl;
return 0;
}
白银有的题目实在是太水了,看一眼怎么做就没敲了。