#include <bits/stdc++.h>
using namespace std;
int n, a[20], len;
int main()
{
scanf("%d", &n);
//这道题不讲武德, 题目说的是正整数, 测试样例却有0
if(n==0){
printf("0");
return 0;
}
while(n){
len++;
a[len]=n%2;
n/=2;
}
for(int i=len; i>=1; --i){
printf("%d", a[i]);
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int n, len;
int main()
{
scanf("%d", &n);
while(n){
if(n%2){
printf("%d\n", len);
}
n/=2;
len++;
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int n, ans;
int main()
{
scanf("%d", &n);
while(n){
if(n%2){
ans++;
}
n/=2;
}
printf("%d", ans);
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int n, temp, totala, totalb, cura, curb;
int main()
{
scanf("%d", &n);
for(int i=1; i<=n; ++i){
temp=i;
cura=curb=0;
while(temp){
if(temp%2){
cura++;
}
else{
curb++;
}
temp/=2;
}
if(cura>curb){
totala++;
}
else{
totalb++;
}
}
printf("%d %d", totala, totalb);
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int n, b, len;
char a[20];
string r="0123456789ABCDEFGHIJ";
int main()
{
scanf("%d %d", &n, &b);
while(n){
len++;
a[len]=r[n%b];
n/=b;
}
for(int i=len; i>=1; --i){
printf("%c", a[i]);
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int n, len;
char a[33];
int main()
{
scanf("%s", &a);
len=strlen(a);
for(int i=0; i<len; ++i){
n=n*2+a[i]-'0';
}
printf("%d", n);
return 0;
}
#include <bits/stdc++.h>
using namespace std;
double n;
int m, ans;
int main()
{
scanf("%lf %d", &n, &m);
n=n-floor(n);
while(m--){
n*=2;
ans=floor(n);
n=n-ans;
}
printf("%d", ans);
return 0;
}
#include <bits/stdc++.h>
using namespace std;
char a[100010];
int b[400010], ans[200010];
int len, num, lenans;
bool flag;
int main()
{
scanf("%s", &a);
len=strlen(a);
//从最低位开始, 一个十六进制拆成4个二进制
for(int i=len-1; i>=0; --i){
//将十六进制字符a[i]变为整数num
if(a[i]>='0' && a[i]<='9'){
num=a[i]-'0';
}
else if(a[i]>='A' && a[i]<='F'){
num=a[i]-'A'+10;
}
//将第i位上的十六进制数转换为第4*i~4*(i+1)-1位的二进制数
for(int j=4*(i+1)-1; j>=4*i; --j){
b[j]=num%2;
num/=2;
}
}
//从最低位开始, 3个二进制合并为1个八进制
for(int i=4*len-1; i>=0;){
if(i>=2){
num=b[i-2]*4+b[i-1]*2+b[i];
i-=3;
lenans++;
ans[lenans]=num;
}
else if(i==1){
num=b[i-1]*2+b[i];
i-=2;
lenans++;
ans[lenans]=num;
}
else if(i==0){
num=b[i];
i--;
lenans++;
ans[lenans]=num;
}
}
for(int i=lenans; i>=1; --i){
if(ans[i]==0 && !flag){
continue;
}
if(ans[i]!=0){
flag=true;
}
printf("%d", ans[i]);
}
if(len==1 && a[0]=='0'){
printf("0");
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int n, len, num, temp[11], curlen;
char a[300];
int main()
{
scanf("%d %s", &n, &a);
len=strlen(a);
for(int i=0; i<len; ++i){
if(a[i]=='!'){
if(num==0){ //可能为0
printf("0");
}
while(num){
curlen++;
temp[curlen]=num%10;
num/=10;
}
for(int j=curlen; j>=1; --j) {
printf("%d", temp[j]);
}
num=0;
curlen=0;
continue;
}
num=num*8+a[i]-'0';
}
if(num==0){ //可能为0
printf("0");
}
while(num){
curlen++;
temp[curlen]=num%10;
num/=10;
}
for(int j=curlen; j>=1; --j) {
printf("%d", temp[j]);
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int n, ans=1, fac=1;
int main()
{
scanf("%d", &n);
for(int i=1; i<=n; ++i){
fac*=i;
while(fac%2==0){
ans++;
fac>>=1;
}
}
printf("%d", ans);
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int n, cnt, a[100];
int main()
{
scanf("%d", &n);
if(n==0){
printf("0");
return 0;
}
while(n){
cnt++;
a[cnt]=abs(n%2);
n=(n-a[cnt])/-2;
}
for(int i=cnt; i>=1; --i){
printf("%d", a[i]);
}
return 0;
}
asd
#include <bits/stdc++.h>
using namespace std;
char s1[510], s2[510];
int a[510], b[510], sum[510];
int lena, lenb, lens;
int main()
{
cin >> s1 >> s2;
lena=strlen(s1);
lenb=strlen(s2);
lens=max(lena, lenb);
for(int i=1; i<=lena; ++i){
a[i]=s1[lena-i]-'0';
}
for(int i=1; i<=lenb; ++i){
b[i]=s2[lenb-i]-'0';
}
for(int i=1; i<=lens; ++i){
sum[i]=sum[i]+a[i]+b[i];
if(sum[i]>=10){
sum[i+1]=sum[i+1]+sum[i]/10;
sum[i]%=10;
}
}
if(sum[lens+1]){
lens++;
}
for(int i=lens; i>=1; --i){
cout << sum[i];
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
char a[10087], b[10087], tmp[10087];
int lena, lenb, len, num1[10087], num2[10087], ans[10087];
int main()
{
cin >> a >> b;
lena=strlen(a);
lenb=strlen(b);
len=max(lena, lenb);
//如果a<b, strcmp(a,b)<0
//如果a==b, strcmp(a,b)=0
//如果a>b, strcmp(a,b)>0
//a小于b的情况
if(lena<lenb || lena==lenb && strcmp(a,b)<0){
cout << "-";
swap(a, b);
swap(lena, lenb);
// strcpy(tmp, a); //tmp=a;
// strcpy(a, b); //a=b;
// strcpy(b, tmp); //b=tmp
}
//做a-b
// lena=strlen(a);
// lenb=strlen(b);
//将字符数组a转换为整数数组num1
for(int i=0; i<lena; ++i){
num1[i+1]=a[lena-i-1]-'0';
}
//将字符数组b转换为整数数组num2
for(int i=0; i<lenb; ++i){
num2[i+1]=b[lenb-i-1]-'0';
}
for(int i=1; i<=len; ++i){
if(num1[i]<num2[i]){
num1[i]=num1[i]+10;
num1[i+1]--;
}
ans[i]=num1[i]-num2[i];
}
//去掉答案前面的0
for(int i=len; i>1; --i){
if(ans[i]==0)
len--;
else
break;
}
//输出答案
for(int i=len; i>=1; --i){
cout << ans[i];
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
string a, b;
int len1, len2, len, num1[10089], num2[10089], ans[10089];
//运算符重载,判断两个数的大小,第一个小于第二个返回true
bool operator < (string &x, string &y)
{
int l1=x.length();
int l2=y.length();
if(l1<l2){
return true;
}
else if(l1>l2){
return false;
}
for(int i=0; i<l1; ++i){
if(x[i]<y[i]){
return true;
}
}
return false;
}
int main()
{
cin >> a >> b;
//如果a小于b,则为负数,先输出一个负号,再交换a和b的值
if(a<b){
cout << "-";
swap(a, b);
}
len=len1=a.length();
len2=b.length();
//字符串转整数数组
for(int i=0; i<len1; ++i){
num1[i]=a[len1-i-1]-'0';
}
for(int i=0; i<len2; ++i){
num2[i]=b[len2-i-1]-'0';
}
//做a-b运算
for(int i=0; i<len; ++i){
ans[i]=num1[i]-num2[i];
//处理借位
if(ans[i]<0){
ans[i]+=10;
num1[i+1]--;
}
}
//处理最高位的0
for(int i=len-1; i>=0; --i){
//直到最高位出现非0位,退出循环
if(ans[i]!=0){
break;
}
//如果最高位是0,则长度--
if(ans[i]==0){
len--;
}
}
//如果a和b相等,最后答案为0,前面会将len变为0
if(len==0) len++;
//输出答案
for(int i=len-1; i>=0; --i){
cout << ans[i];
}
return 0;
}
asd
asd
#include <bits/stdc++.h>
using namespace std;
char a[2020], b[2020];
int lena, lenb, len, numa[2020], numb[2020], ans[4040];
int main()
{
scanf("%s %s", &a, &b); //输入两个字符数组
lena=strlen(a); //计算第一个数的位数
lenb=strlen(b); //计算第二个数的位数
for(int i=0; i<lena; ++i){ //将字符数组倒序转换为整数数组,个位从下标1开始
numa[i+1]=a[lena-i-1]-'0';
}
for(int i=0; i<lenb; ++i){ //将字符数组倒序转换为整数数组,个位从下标1开始
numb[i+1]=b[lenb-i-1]-'0';
}
for(int i=1; i<=lenb; ++i){ //模拟乘法竖式,用第二个数的每一位依次乘以第一个数的每一位
for(int j=1; j<=lena; ++j){
ans[i+j-1]+=numb[i]*numa[j]; //第i位和第j位相乘的结果要累加到底i+j-1位
if(ans[i+j-1]>=10){ //处理进位
ans[i+j]+=ans[i+j-1]/10; //进到更高的一位,落实在数组中,下标加一
ans[i+j-1]%=10; //自己留下余数
}
}
}
len=lena+lenb; //两数相乘最大的位数就是lena+lenb,当然也可能是lena+lenb-1(最高位没有进位时)
for(int i=len; i>1; --i){ //处理最高位前面的0,i>1,能保证答案至少有1位
if(ans[i]==0){ //如果最高位是0,答案的位数减一
len--;
}
else{ //只要发现有不为0的位,说明答案位数已确定,跳出循环
break;
}
}
for(int i=len; i>=1; --i) //从最高位到最低位依次输出答案
printf("%d", ans[i]);
return 0;
}
#include <bits/stdc++.h>
using namespace std;
char a[2020], b[2020];
int lena, lenb, len, numa[2020], numb[2020], ans[4040];
int main()
{
scanf("%s %s", &a, &b); //输入两个字符数组
lena=strlen(a); //计算第一个数的位数
lenb=strlen(b); //计算第二个数的位数
for(int i=0; i<lena; ++i){ //将字符数组倒序转换为整数数组,个位从下标1开始
numa[i+1]=a[lena-i-1]-'0';
}
for(int i=0; i<lenb; ++i){ //将字符数组倒序转换为整数数组,个位从下标1开始
numb[i+1]=b[lenb-i-1]-'0';
}
for(int i=1; i<=lenb; ++i){ //模拟乘法竖式,用第二个数的每一位依次乘以第一个数的每一位
for(int j=1; j<=lena; ++j){
ans[i+j-1]+=numb[i]*numa[j]; //第i位和第j位相乘的结果要累加到底i+j-1位
if(ans[i+j-1]>=10){ //处理进位
ans[i+j]+=ans[i+j-1]/10; //进到更高的一位,落实在数组中,下标加一
ans[i+j-1]%=10; //自己留下余数
}
}
}
len=lena+lenb; //两数相乘最大的位数就是lena+lenb,当然也可能是lena+lenb-1(最高位没有进位时)
for(int i=len; i>1; --i){ //处理最高位前面的0,i>1,能保证答案至少有1位
if(ans[i]==0){ //如果最高位是0,答案的位数减一
len--;
}
else{ //只要发现有不为0的位,说明答案位数已确定,跳出循环
break;
}
}
for(int i=len; i>=1; --i) //从最高位到最低位依次输出答案
printf("%d", ans[i]);
return 0;
}
asd
asd
#include <bits/stdc++.h>
using namespace std;
int n, m;
struct node{
int num[110]; //最低位(个位)存在num[1]
int length;
}ans[110][110];
node operator + (node x, node y)
{
node c;
c.length=max(x.length, y.length);
memset(c.num, 0, sizeof(c.num));
for(int i=1; i<=c.length; ++i){
c.num[i]+=x.num[i]+y.num[i];
if(c.num[i]>=10){
c.num[i+1]+=c.num[i]/10;
c.num[i]%=10;
}
}
if(c.num[c.length+1]){
c.length++;
}
return c;
}
int main()
{
scanf("%d %d", &n, &m);
for(int i=1; i<=n; ++i){
ans[i][1].num[1]=1;
ans[i][1].length=1;
}
for(int i=1; i<=m; ++i){
ans[1][i].num[1]=1;
ans[1][i].length=1;
}
for(int i=2; i<=n; ++i){
for(int j=2; j<=m; ++j){
ans[i][j]=ans[i-1][j]+ans[i][j-1];
}
}
for(int i=ans[n][m].length; i>=1; --i){
printf("%d", ans[n][m].num[i]);
}
return 0;
}
asd