#include <stdlib.h>
#include "oj.h"
#include <math.h>
#include <string.h>
#include <stdio.h>
#pragma warning(disable: 4996)
/* 功能:输入一个整数n,求1到n这n个整数的十进制表示中1出现的次数
* 输入:输入的整数
* 输出:无
* 返回:1到n这n个整数的十进制表示中1出现的次数
*/
int CountOf1s(int n, char ch )
{
int len;
char inString[100] = {0} ;
char *temp_str = NULL;
int temp_int = 0;
_itoa(n, inString, 10);
len = (int)strlen(inString);
temp_str = (char *)malloc(len*sizeof(char));
int i = 1;
int times = 0;
//while()
while(i <= len)
{
if(inString[i-1] - ch >= 0)
{
//位数大
if(i == len)
{
strncpy(temp_str, inString+1, len-1);
temp_int = atoi(temp_str);
times += temp_int+1;
//temp_str = "\0";
memset(temp_str,len,0);
}
else
{
strncpy(temp_str, inString, len-i);
temp_int = atoi(temp_str);
times += (temp_int+1) * (int)pow(10.0,i-1);
memset(temp_str,len,0);//temp_str = "\0";
}
i++;
}
else
{
//位数小
if(i == len)
{
i++;
continue;
}
strncpy(temp_str, inString, len-i);
temp_int = atoi(temp_str);
times += temp_int * (int)pow(10.0, i-1);
memset(temp_str,len,0);//temp_str = "\0";
i++;
}
} //while ();
free(temp_str);
return times;
}
http://bbs.csdn.net/topics/360238282
#include <stdlib.h>
#include "oj.h"
#include <math.h>
#include <string.h>
#include <stdio.h>
#pragma warning(disable: 4996)
/* 功能:输入一个整数n,求1到n这n个整数的十进制表示中1出现的次数
* 输入:输入的整数
* 输出:无
* 返回:1到n这n个整数的十进制表示中1出现的次数
*/
int CountOf1s(int n, char ch )
{
int len;
char inString[100] = {0} ;
char *temp_str = NULL;
int temp_int = 0;
_itoa(n, inString, 10);
len = (int)strlen(inString);
temp_str = (char *)malloc(len*sizeof(char));
int i = 1;
int times = 0;
//while()
while(i <= len)
{
if(inString[i-1] - ch >= 0)
{
//位数大
if(i == len)
{
strncpy(temp_str, inString+1, len-1);
temp_int = atoi(temp_str);
times += temp_int+1;
//temp_str = "\0";
memset(temp_str,len,0);
}
else
{
strncpy(temp_str, inString, len-i);
temp_int = atoi(temp_str);
times += (temp_int+1) * (int)pow(10.0,i-1);
memset(temp_str,len,0);//temp_str = "\0";
}
i++;
}
else
{
//位数小
if(i == len)
{
i++;
continue;
}
strncpy(temp_str, inString, len-i);
temp_int = atoi(temp_str);
times += temp_int * (int)pow(10.0, i-1);
memset(temp_str,len,0);//temp_str = "\0";
i++;
}
} //while ();
free(temp_str);
return times;
}