c语言oj试题笛卡尔平面,九度oj 题目1373:整数中1出现的次数(从1到n整数中1出现的次数)...

1

6

4

7

这个题目是按1491的思路来做的

代码如下

#include

#include

char a[], b[];

int main(void){

while (scanf ("%s %s", a,b) != EOF) {

int ra = ;

int numa = ;

int cnta1 = ;

int lena = strlen(a);

for(int i = ; i < lena; i++) {

int q = ;

int tmp = a[i] - '';

if(tmp >= ) {

q = ;

}

ra = numa + q + (ra - cnta1) * + (tmp+) * cnta1;

//个位 //前位

//for example 123

// 12 + 1 + (F(12) - 1的个数 )*10 + 个位的个数 * 前面出现1的个数

// F(11)

// 1--12 1 + 0 1

numa = numa * + tmp;

if(tmp == ) {

cnta1++;

}

}

int rb = ;

int numb = ;

int cntb1 = ;

int lenb = strlen(b);

for(int i = ; i < lenb; i++) {

int q = ;

int tmp = b[i] - '';

if(tmp >= ) {

q = ;

}

rb = numb + q + (rb - cntb1)* + (tmp+)*cntb1;

numb = numb * + tmp;

if(tmp == ) {

cntb1++;

}

}

int ans = ;

if(numb > numa) {

ans = rb - (ra-cnta1);

}

else{

ans = ra - (rb-cntb1);

}

printf("%d\n",ans);

}

return ;

}

一开始提交错误,因为题目中居然没有说a,b的大小关系。

注意47行是numb和numa比较,而不是rb和 ra比较

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值