Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1585108
  • 博文数量: 399
  • 博客积分: 8508
  • 博客等级: 中将
  • 技术积分: 5302
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-14 09:28
个人简介

能力强的人善于解决问题,有智慧的人善于绕过问题。 区别很微妙,小心谨慎做后者。

文章分类

全部博文(399)

文章存档

2018年(3)

2017年(1)

2016年(1)

2015年(69)

2013年(14)

2012年(17)

2011年(12)

2010年(189)

2009年(93)

分类:

2009-11-03 10:18:48

实现的几个小程序:

1.要写一个函数,传三个参数,double,int ,bool  三个参数。   

    作用就是:传double进来 用int来取小数位数  ,bool用来确认是否要四舍五入。 
    返回的为string 值。
    例如: 
    如果传一个double的 如12345.6789  
    然后传一个int 进来 如 3 
    然后要使这个double保留3位小数 12345.679 
    Bool的是控制是否四舍五入。 
    返回的为string 的值。
 


    方法1:

  1. #include
  2. #include
  3. using namespace std;
  4. string doubleConvert(double dval,int nlen ,bool bval)
  5. {
  6.     char buf[100];
  7.     sprintf(buf,"%lf",dval);
  8.     int buf_len = strlen(buf);
  9.     int point_pos = char_traits<char>::find(buf, buf_len,'.')-buf;
  10.     int total_len = point_pos+nlen;
  11.     if ( buf_len > total_len && bval && buf[total_len+1]>='5') buf[total_len]+=1;
  12.     buf[total_len+1] = '\0';
  13.     return buf;
  14. }
  15. int main()
  16. {
  17.     double dval = 12345.6789;
  18.     string str = doubleConvert(dval,3,true);
  19.     cout << str.c_str();
  20.     return 0;
  21. }

 

        方法2:

 

  1. #include 
  2. #include 
  3. #include 
  4. using namespace std;
  5. string doubleConvert(double dval,int nlen ,bool bval)
  6. {
  7.     double d = bval ? 0.5 : 0;
  8.     double n = pow(10.0, nlen);
  9.     char buf[128] = {0};
  10.     char format [128] = {0};
  11.     sprintf(format, "%%.%dlf", nlen);
  12.     sprintf(buf,format,(int)(dval*n+d)/(double)n);
  13.     
  14.     return buf;
  15. }
  16. int main()
  17. {
  18.     double dval = 12345.6789;
  19.     string str = doubleConvert(dval,3,true);
  20.     cout << str <
  21.     return 0;
  22. }

2. 把一个整数的各个位相加,得出另外一个整数,然后再将此整数的各个为相加,直到得出的整数小于10 为止(用递归的方法 实现)。
    如:20081029 --〉22 --〉4

 

  1. #include 
  2. using namespace std;
  3. int Get(int n)
  4. {
  5.     int i = 0;
  6.     while (n) i+=n%10,n/=10;
  7.     return i < 10 ? i : Get(i);
  8. }
  9. int main()
  10. {
  11.     cout << Get(20081029) << endl;
  12.     return 0;
  13. }

3.  把任意一个整数转化为顺序相反的整数。 如:632 --〉236; 1024 --〉4201

 

  1. #include 
  2. using namespace std;
  3. int Rev(int n)
  4. {
  5.     int i = 0;
  6.     while (n) i=i*10+n%10,n/=10;
  7.     return i;
  8. }
  9. int main()
  10. {
  11.     cout << Rev(20081029) << endl;
  12.     return 0;
  13. }

4.  将字符串倒序

  1. #include 
  2. using namespace std;
  3. void resort( char* pStr ) //字符串倒序
  4.     int nLen = strlen( pStr ); 
  5.     int nLoopCount = nLen / 2; 
  6.     for ( int i = 0; i < nLoopCount; i ++ ) 
  7.     { 
  8.         char c = pStr[i]; 
  9.         pStr[i] = pStr[nLen-i-1]; 
  10.         pStr[nLen-i-1] = c; 
  11.     } 
  12. int convert(int temp)
  13. {
  14.     char str[10];
  15.     itoa(temp,str,10);//把整数转成字符串
  16.     resort(str);
  17.     return atoi(str);//返回时,把字符串转成整型
  18. }
  19. int main()
  20.     int x=1023;
  21.     cout<
  22.     return 0;
  23. }

 5. 给定数组 A(N),找出其中相距最近的两个数。距离 R=|A[i+1]-A[i]|

     即:在一个数组中找出相邻两个元素之间相差最小的,R=|A[i+1]-A[i]|,不是所有元素中,而是相邻元素中。

方法1:

template
int near(T* a, int n)
{
   int mi = 0;
   T dif = a[1] - a[0];
   for(int i = 1; i< n - 1; ++i){
     T absv = (a[i+1]     if(absv < dif){
       dif = absv;
       mi = i; 
     } 
   } 
   return mi;
}

#include
using namespace std;

int main()
{
   int a[5] = {3,9,5,2,7};
   int i = near(a, 5);
   cout<   return 0; 
}

 

方法2:

#include
#include
using namespace std;

#define N 6

int find(int* a)
{
   int min = 1000, ind = -1;
   if(N <= 2){
     return 0; 
  } 
  else{
    for(int i = 0; i < N - 1; ++i){
       if(abs(a[i]-a[i+1]) < min){
          min = abs(a[i] - a[i+1]);
         ind = i;
       } 
    } 
  }
 return ind;
}

 

int main()
{
   int a[N] = {3,9,5,2,7,6}; 
   int index = find(a);
   cout<<"The element is:"<   return 0;
}

阅读(599) | 评论(0) | 转发(0) |
0

上一篇:大数加法c++

下一篇:awk手册

给主人留下些什么吧!~~