gpt4 book ai didi

c# - 如何操作整数值的特定数字?

转载 作者:行者123 更新时间:2023-11-30 21:38:06 24 4
gpt4 key购买 nike

我必须创建一个可以操作整数值(从 0999,999 )的每个“数字”的控件。

我知道如何“获取”整数的数字 - 只是 Mod/Div -

public class IntegerModel{
private int _value = 0;
private int _GetValue( int baseValue, int modBy, int divBy ) =>
( baseValue % modBy ) / divBy;

public int Value => _this.Value;

public One => {
get => this._GetValue( this.Value, 10, 1 );
set => Console.WriteLine( "What do I put here?" );
}

public Ten{
get => this._GetValue( this.Value, 100, 10 );
set => Console.WriteLine( "What do I put here?" );
}
}

问题是我不知道如何 Eloquent 地设置数字值。

如果我在二进制中工作,它会像使用一些按位运算符一样简单(它可能仍然是但我不知 Prop 体怎么做)。

因此,理想情况下,如果我要使用此类执行以下操作,我将获得给定的输出。

IntegerModel Foo = new IntegerModel( );
Foo.One = 7;
Foo.Ten = 3;
Console.WriteLine( Foo.Value ); //Output should be 37

我需要在 OneTen 属性 setter 中放入什么才能实现所需的行为?

最佳答案

我建议对 setget 使用模块化算法;另一个建议是实现 indexer 以访问整数的第 n 位。

  public class IntegerModel {
private int _value = 0;

private static int Power10(int value) {
return (int) Math.Pow(10, value);
}

public int Value {
get {
return _value;
}
}

//TODO: Implement ToString, Equals etc.

public int this[int index] {
get {
if (index < 0 || index > 6)
throw new ArgumentOutOfRangeException("index");

return (_value / Power10(index)) % 10;
}
set {
if (index < 0 || index > 6)
throw new ArgumentOutOfRangeException("index");
else if (value < 0 || value > 9)
throw new ArgumentOutOfRangeException("value");

_value = (index / Power10(index + 1)) * Power10(index + 1) +
value * Power10(index) +
_value % Power10(index);
}
}
}

如果您坚持使用 OneTen 等属性,您可以轻松添加它们:

  public int One {
get {return this[0];} // 0th digit
set {this[0] = value;} // 0th digit
}

public int Ten {
get {return this[1];} // 1st digit
set {this[1] = value;} // 1st digit
}

public int Hundred {
get {return this[2];} // 2nd digit
set {this[2] = value;} // 2nd digit
}

测试:

  IntegerModel test = new IntegerModel();

// 987:
test[0] = 7; // Last (0th digit from the end)
test[1] = 8; // Middle (1st digit from the end)
test[2] = 9; // First (2nd digit from the end)

// 987
Console.WriteLine(test.Value);

关于c# - 如何操作整数值的特定数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46407403/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com